From 6eb71f197866c67d8f40609ee6782a573fc81450 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 29 Nov 2020 18:03:51 +0100 Subject: [PATCH 01/31] Add XML writer --- src.compiler/csharp/CSharpAstTransformer.ts | 10 ++ src/importer/CapellaParser.ts | 4 +- src/importer/GpifParser.ts | 105 +++++++++------ src/importer/MusicXmlImporter.ts | 4 +- src/xml/XmlDocument.ts | 10 +- src/xml/XmlNode.ts | 12 -- src/xml/XmlWriter.ts | 142 ++++++++++++++++++++ test/xml/XmlParse.test.ts | 33 +++-- test/xml/XmllWrite.test.ts | 85 ++++++++++++ 9 files changed, 338 insertions(+), 67 deletions(-) create mode 100644 src/xml/XmlWriter.ts create mode 100644 test/xml/XmllWrite.test.ts diff --git a/src.compiler/csharp/CSharpAstTransformer.ts b/src.compiler/csharp/CSharpAstTransformer.ts index e4937d801..62410f884 100644 --- a/src.compiler/csharp/CSharpAstTransformer.ts +++ b/src.compiler/csharp/CSharpAstTransformer.ts @@ -2704,6 +2704,16 @@ export default class CSharpAstTransformer { break; } break; + case 'String': + switch (memberAccess.tsSymbol!.name) { + case 'trimRight': + memberAccess.member = 'TrimEnd'; + break; + case 'trimLeft': + memberAccess.member = 'TrimStart'; + break; + } + break; } } } diff --git a/src/importer/CapellaParser.ts b/src/importer/CapellaParser.ts index d8b986b1a..20f7dc7c0 100644 --- a/src/importer/CapellaParser.ts +++ b/src/importer/CapellaParser.ts @@ -123,9 +123,9 @@ export class CapellaParser { this._crescendo = new Map(); this._isFirstSystem = true; - let dom: XmlDocument; + let dom: XmlDocument = new XmlDocument(); try { - dom = new XmlDocument(xml); + dom.parse(xml); } catch (e) { throw new UnsupportedFormatError('Could not parse XML', e); } diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 4068cb823..604a2eb08 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -115,9 +115,9 @@ export class GpifParser { this._lyricsByTrack = new Map(); this._skipApplyLyrics = false; - let dom: XmlDocument; + let dom: XmlDocument = new XmlDocument(); try { - dom = new XmlDocument(xml); + dom.parse(xml); } catch (e) { throw new UnsupportedFormatError('Could not parse XML', e); } @@ -294,8 +294,8 @@ export class GpifParser { break; case 'Value': let parts: string[] = c.innerText.split(' '); - // Issue 391: Some GPX files might have - // single floating point value. + // Issue 391: Some GPX files might have + // single floating point value. if (parts.length === 1) { value = parseFloat(parts[0]); reference = 1; @@ -512,7 +512,7 @@ export class GpifParser { private parseArticulation(track: Track, node: XmlNode) { const articulation = new InstrumentArticulation(); articulation.outputMidiNumber = -1; - let name = ""; + let name = ''; for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { const txt = c.innerText; @@ -556,7 +556,6 @@ export class GpifParser { articulation.noteHeadWhole = this.parseNoteHead(noteHeadsTxt[2]); } - if (articulation.noteHeadHalf == MusicFontSymbol.None) { articulation.noteHeadHalf = articulation.noteHeadDefault; } @@ -587,50 +586,78 @@ export class GpifParser { if (name.length > 0) { this._articulationByName.set(name, articulation); } - } - else if (name.length > 0 && this._articulationByName.has(name)) { + } else if (name.length > 0 && this._articulationByName.has(name)) { this._articulationByName.get(name)!.staffLine = articulation.staffLine; } - } private parseTechniqueSymbol(txt: string): MusicFontSymbol { switch (txt) { - case 'pictEdgeOfCymbal': return MusicFontSymbol.PictEdgeOfCymbal; - case 'articStaccatoAbove': return MusicFontSymbol.ArticStaccatoAbove; - case 'noteheadParenthesis': return MusicFontSymbol.NoteheadParenthesis; - case 'stringsUpBow': return MusicFontSymbol.StringsUpBow; - case 'stringsDownBow': return MusicFontSymbol.StringsDownBow; - case 'guitarGolpe': return MusicFontSymbol.GuitarGolpe; - default: return MusicFontSymbol.None; + case 'pictEdgeOfCymbal': + return MusicFontSymbol.PictEdgeOfCymbal; + case 'articStaccatoAbove': + return MusicFontSymbol.ArticStaccatoAbove; + case 'noteheadParenthesis': + return MusicFontSymbol.NoteheadParenthesis; + case 'stringsUpBow': + return MusicFontSymbol.StringsUpBow; + case 'stringsDownBow': + return MusicFontSymbol.StringsDownBow; + case 'guitarGolpe': + return MusicFontSymbol.GuitarGolpe; + default: + return MusicFontSymbol.None; } } private parseNoteHead(txt: string): MusicFontSymbol { switch (txt) { - case 'noteheadDoubleWholeSquare': return MusicFontSymbol.NoteheadDoubleWholeSquare; - case 'noteheadDoubleWhole': return MusicFontSymbol.NoteheadDoubleWhole; - case 'noteheadWhole': return MusicFontSymbol.NoteheadWhole; - case 'noteheadHalf': return MusicFontSymbol.NoteheadHalf; - case 'noteheadBlack': return MusicFontSymbol.NoteheadBlack; - case 'noteheadNull': return MusicFontSymbol.NoteheadNull; - case 'noteheadXOrnate': return MusicFontSymbol.NoteheadXOrnate; - case 'noteheadTriangleUpWhole': return MusicFontSymbol.NoteheadTriangleUpWhole; - case 'noteheadTriangleUpHalf': return MusicFontSymbol.NoteheadTriangleUpHalf; - case 'noteheadTriangleUpBlack': return MusicFontSymbol.NoteheadTriangleUpBlack; - case 'noteheadDiamondBlackWide': return MusicFontSymbol.NoteheadDiamondBlackWide; - case 'noteheadDiamondWhite': return MusicFontSymbol.NoteheadDiamondWhite; - case 'noteheadDiamondWhiteWide': return MusicFontSymbol.NoteheadDiamondWhiteWide; - case 'noteheadCircleX': return MusicFontSymbol.NoteheadCircleX; - case 'noteheadXWhole': return MusicFontSymbol.NoteheadXWhole; - case 'noteheadXHalf': return MusicFontSymbol.NoteheadXHalf; - case 'noteheadXBlack': return MusicFontSymbol.NoteheadXBlack; - case 'noteheadParenthesis': return MusicFontSymbol.NoteheadParenthesis; - case 'noteheadSlashedBlack2': return MusicFontSymbol.NoteheadSlashedBlack2; - case 'noteheadCircleSlash': return MusicFontSymbol.NoteheadCircleSlash; - case 'noteheadHeavyX': return MusicFontSymbol.NoteheadHeavyX; - case 'noteheadHeavyXHat': return MusicFontSymbol.NoteheadHeavyXHat; - default: return MusicFontSymbol.None; + case 'noteheadDoubleWholeSquare': + return MusicFontSymbol.NoteheadDoubleWholeSquare; + case 'noteheadDoubleWhole': + return MusicFontSymbol.NoteheadDoubleWhole; + case 'noteheadWhole': + return MusicFontSymbol.NoteheadWhole; + case 'noteheadHalf': + return MusicFontSymbol.NoteheadHalf; + case 'noteheadBlack': + return MusicFontSymbol.NoteheadBlack; + case 'noteheadNull': + return MusicFontSymbol.NoteheadNull; + case 'noteheadXOrnate': + return MusicFontSymbol.NoteheadXOrnate; + case 'noteheadTriangleUpWhole': + return MusicFontSymbol.NoteheadTriangleUpWhole; + case 'noteheadTriangleUpHalf': + return MusicFontSymbol.NoteheadTriangleUpHalf; + case 'noteheadTriangleUpBlack': + return MusicFontSymbol.NoteheadTriangleUpBlack; + case 'noteheadDiamondBlackWide': + return MusicFontSymbol.NoteheadDiamondBlackWide; + case 'noteheadDiamondWhite': + return MusicFontSymbol.NoteheadDiamondWhite; + case 'noteheadDiamondWhiteWide': + return MusicFontSymbol.NoteheadDiamondWhiteWide; + case 'noteheadCircleX': + return MusicFontSymbol.NoteheadCircleX; + case 'noteheadXWhole': + return MusicFontSymbol.NoteheadXWhole; + case 'noteheadXHalf': + return MusicFontSymbol.NoteheadXHalf; + case 'noteheadXBlack': + return MusicFontSymbol.NoteheadXBlack; + case 'noteheadParenthesis': + return MusicFontSymbol.NoteheadParenthesis; + case 'noteheadSlashedBlack2': + return MusicFontSymbol.NoteheadSlashedBlack2; + case 'noteheadCircleSlash': + return MusicFontSymbol.NoteheadCircleSlash; + case 'noteheadHeavyX': + return MusicFontSymbol.NoteheadHeavyX; + case 'noteheadHeavyXHat': + return MusicFontSymbol.NoteheadHeavyXHat; + default: + return MusicFontSymbol.None; } } diff --git a/src/importer/MusicXmlImporter.ts b/src/importer/MusicXmlImporter.ts index 70725773f..bf30983ae 100644 --- a/src/importer/MusicXmlImporter.ts +++ b/src/importer/MusicXmlImporter.ts @@ -55,9 +55,9 @@ export class MusicXmlImporter extends ScoreImporter { this._tieStartIds = new Map(); this._slurStarts = new Map(); let xml: string = IOHelper.toString(this.data.readAll(), this.settings.importer.encoding); - let dom: XmlDocument; + let dom: XmlDocument = new XmlDocument(); try { - dom = new XmlDocument(xml); + dom.parse(xml); } catch (e) { throw new UnsupportedFormatError('Unsupported format'); } diff --git a/src/xml/XmlDocument.ts b/src/xml/XmlDocument.ts index 1adc5bc55..19f31776b 100644 --- a/src/xml/XmlDocument.ts +++ b/src/xml/XmlDocument.ts @@ -23,13 +23,17 @@ import { XmlNode, XmlNodeType } from '@src/xml/XmlNode'; import { XmlParser } from '@src/xml/XmlParser'; +import { XmlWriter } from './XmlWriter'; export class XmlDocument extends XmlNode { public documentElement: XmlNode | null = null; - public constructor(xml: string) { + public constructor() { super(); this.nodeType = XmlNodeType.Document; + } + + public parse(xml: string) { XmlParser.parse(xml, 0, this); for (let child of this.childNodes) { if (child.nodeType === XmlNodeType.Element) { @@ -38,4 +42,8 @@ export class XmlDocument extends XmlNode { } } } + + public toString(indention: string = '', xmlHeader:boolean = false): string { + return XmlWriter.write(this, indention, xmlHeader); + } } diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index bdb94a68c..94aedf326 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -24,22 +24,10 @@ export enum XmlNodeType { None, Element, - Attribute, Text, CDATA, - EntityReference, - Entity, - ProcessingInstruction, - Comment, Document, DocumentType, - DocumentFragment, - Notation, - Whitespace, - SignificantWhitespace, - EndElement, - EndEntity, - XmlDeclaration } export class XmlNode { diff --git a/src/xml/XmlWriter.ts b/src/xml/XmlWriter.ts new file mode 100644 index 000000000..64719359d --- /dev/null +++ b/src/xml/XmlWriter.ts @@ -0,0 +1,142 @@ +import { XmlNode, XmlNodeType } from './XmlNode'; + +export class XmlWriter { + public static write(xml: XmlNode, indention: string, xmlHeader: boolean): string { + const writer = new XmlWriter(indention, xmlHeader); + writer.writeNode(xml); + return writer.toString(); + } + + // NOTE: we use the string.join variant rather than the + // string concatenation for IE performnace concerns + private _result: string[] = []; + private _indention: string; + private _xmlHeader: boolean; + + private _isStartOfLine: boolean; + private _currentIndention: string; + + public constructor(indention: string, xmlHeader: boolean) { + this._indention = indention; + this._xmlHeader = xmlHeader; + this._currentIndention = ''; + this._isStartOfLine = true; + } + + public writeNode(xml: XmlNode) { + switch (xml.nodeType) { + case XmlNodeType.None: + break; + case XmlNodeType.Element: + if (this._result.length > 0) { + this.writeLine(); + } + this.write(`<${xml.localName}`); + xml.attributes.forEach((value, name) => { + this.write(` ${name}="`); + this.writeAttributeValue(value); + this.write('"'); + }); + + if (xml.childNodes.length === 0) { + this.write('/>'); + } else { + this.write('>'); + if (xml.childNodes.length === 1 && !xml.firstElement) { + this.writeNode(xml.childNodes[0]); + } else { + this.indent(); + for (const child of xml.childNodes) { + // skip text nodes in case of multiple children + if (child.nodeType === XmlNodeType.Element) { + this.writeNode(child); + } + } + this.unindend(); + this.writeLine(); + } + this.write(``); + } + break; + case XmlNodeType.Text: + if (xml.value) { + this.write(xml.value); + } + break; + case XmlNodeType.CDATA: + if (xml.value) { + this.write(`'); + } + for (const child of xml.childNodes) { + this.writeNode(child); + } + break; + case XmlNodeType.DocumentType: + this.write(``); + break; + } + } + + private unindend() { + this._currentIndention = this._currentIndention.substr( + 0, + this._currentIndention.length - this._indention.length + ); + } + private indent() { + this._currentIndention += this._indention; + } + + private writeAttributeValue(value: string) { + for (let i = 0; i < value.length; i++) { + const c = value.charAt(i); + switch (c) { + case '<': + this._result.push( '<'); + break; + case '>': + this._result.push( '>'); + break; + case '&': + this._result.push( '&'); + break; + case "'": + this._result.push( '''); + break; + case '"': + this._result.push('"'); + break; + default: + this._result.push(c); + break; + } + } + } + + private write(s: string) { + if (this._isStartOfLine) { + this._result.push(this._currentIndention); + } + this._result.push(s); + this._isStartOfLine = false; + } + + private writeLine(s: string | null = null) { + if (s) { + this.write(s); + } + if (this._indention.length > 0 && !this._isStartOfLine) { + this._result.push('\n'); + this._isStartOfLine = true; + } + } + + public toString() { + return this._result.join('').trimRight(); + } +} diff --git a/test/xml/XmlParse.test.ts b/test/xml/XmlParse.test.ts index f7233df38..5b9a17697 100644 --- a/test/xml/XmlParse.test.ts +++ b/test/xml/XmlParse.test.ts @@ -5,7 +5,8 @@ import { TestPlatform } from '@test/TestPlatform'; describe('XmlParseTest', () => { it('parseSimple', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.childNodes.length).toEqual(0); @@ -13,7 +14,8 @@ describe('XmlParseTest', () => { it('parseShorthand', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.childNodes.length).toEqual(0); @@ -21,7 +23,8 @@ describe('XmlParseTest', () => { it('parseSingleAttribute', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.getAttribute('att')).toEqual('v'); @@ -30,7 +33,8 @@ describe('XmlParseTest', () => { it('parseMultipleAttributes', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.getAttribute('att')).toEqual('v'); @@ -40,7 +44,8 @@ describe('XmlParseTest', () => { it('parseSimpleText', () => { let s: string = 'Text'; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.childNodes.length).toEqual(1); @@ -50,7 +55,8 @@ describe('XmlParseTest', () => { it('parseChild', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.childNodes.length).toEqual(1); @@ -60,7 +66,8 @@ describe('XmlParseTest', () => { it('parseMultiChild', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); expect(xml.documentElement!.childNodes.length).toEqual(2); @@ -72,7 +79,8 @@ describe('XmlParseTest', () => { it('parseComments', () => { let s: string = 'value'; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('test'); expect(xml.documentElement!.childNodes.length).toEqual(2); @@ -88,7 +96,8 @@ describe('XmlParseTest', () => { it('parseDoctype', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('test'); expect(xml.documentElement!.childNodes.length).toEqual(2); @@ -100,14 +109,16 @@ describe('XmlParseTest', () => { it('parseXmlHeadTest', () => { let s: string = ''; - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); expect(xml.documentElement!.localName).toEqual('root'); }); it('parseFull', async () => { const s = await TestPlatform.loadFileAsString('test-data/xml/GPIF.xml'); - let xml: XmlDocument = new XmlDocument(s); + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); expect(xml.documentElement).toBeTruthy(); }); }); diff --git a/test/xml/XmllWrite.test.ts b/test/xml/XmllWrite.test.ts new file mode 100644 index 000000000..825d5815d --- /dev/null +++ b/test/xml/XmllWrite.test.ts @@ -0,0 +1,85 @@ +import { XmlDocument } from '@src/xml/XmlDocument'; + +describe('XmlWriteTest', () => { + it('writeSimple', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(''); + }); + + it('writeSingleAttribute', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(''); + }); + + it('writeMultipleAttributes', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(''); + }); + + it('writeSimpleText', () => { + let s: string = 'Text'; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(s); + }); + + it('writeSimpleTextFormatted', () => { + let s: string = 'Text'; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString(" ")).toEqual(s); + }); + + it('writeChild', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(''); + expect(xml.toString(" ")).toEqual('\n \n'); + expect(xml.toString(" ")).toEqual('\n \n'); + }); + + it('writeMultiChild', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(''); + expect(xml.toString(" ")).toEqual('\n \n \n'); + expect(xml.toString(" ")).toEqual('\n \n \n'); + }); + + it('writeXmlHeadTest', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString(undefined, true)).toEqual(''); + expect(xml.toString(" ", true)).toEqual('\n'); + }); + + it('writeDoctype', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual(s); + expect(xml.toString(" ")).toEqual('\n'); + }); + + it('writeEscapedAttributeValues', () => { + let s: string = ''; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + xml.documentElement!.attributes.set("lt", "<"); + xml.documentElement!.attributes.set("gt", ">"); + xml.documentElement!.attributes.set("amp", "&"); + xml.documentElement!.attributes.set("apos", "'"); + xml.documentElement!.attributes.set("quot", "\""); + expect(xml.toString()).toEqual(''); + }); + +}); From baca7878f6f05c24b10d1cdab25102a9be6957b3 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 29 Nov 2020 18:59:57 +0100 Subject: [PATCH 02/31] Setup base structure for GP7 export --- src/alphatab.ts | 8 ++++ src/exporter/Gp7Exporter.ts | 37 +++++++++++++++++ src/exporter/GpifWriter.ts | 26 ++++++++++++ src/exporter/ScoreExporter.ts | 28 +++++++++++++ src/importer/BinaryStylesheet.ts | 5 +++ src/importer/CapellaImporter.ts | 3 +- src/importer/Gp7Importer.ts | 3 +- src/importer/GpifParser.ts | 2 +- src/importer/PartConfiguration.ts | 5 +++ src/io/IOHelper.ts | 22 +++++++++- src/zip/Deflate.ts | 4 ++ src/zip/ZipEntry.ts | 18 +++++++++ src/zip/ZipReader.ts | 29 ++++--------- src/zip/ZipWriter.ts | 67 +++++++++++++++++++++++++++++++ 14 files changed, 230 insertions(+), 27 deletions(-) create mode 100644 src/exporter/Gp7Exporter.ts create mode 100644 src/exporter/GpifWriter.ts create mode 100644 src/exporter/ScoreExporter.ts create mode 100644 src/zip/Deflate.ts create mode 100644 src/zip/ZipEntry.ts create mode 100644 src/zip/ZipWriter.ts diff --git a/src/alphatab.ts b/src/alphatab.ts index 45b7a7730..e0f5a6e80 100644 --- a/src/alphatab.ts +++ b/src/alphatab.ts @@ -127,6 +127,14 @@ export const importer = { UnsupportedFormatError }; +import { ScoreExporter } from '@src/exporter/ScoreExporter'; +import { Gp7Exporter } from '@src/exporter/Gp7Exporter'; + +export const exporter = { + ScoreExporter, + Gp7Exporter +}; + import { BeatTickLookup } from '@src/midi/BeatTickLookup'; import { MasterBarTickLookup } from '@src/midi/MasterBarTickLookup'; import { MidiTickLookup, MidiTickLookupFindBeatResult } from '@src/midi/MidiTickLookup'; diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts new file mode 100644 index 000000000..40506cc25 --- /dev/null +++ b/src/exporter/Gp7Exporter.ts @@ -0,0 +1,37 @@ +import { Logger } from '@src/alphatab'; +import { Score } from '@src/model/Score'; +import { ZipEntry } from '@src/zip/ZipEntry'; +import { ScoreExporter } from './ScoreExporter'; +import { IOHelper } from '@src/io/IOHelper'; +import { BinaryStylesheet } from '@src/importer/BinaryStylesheet'; +import { PartConfiguration } from '@src/importer/PartConfiguration'; +import { GpifWriter } from './GpifWriter'; +import { ZipWriter } from '@src/zip/ZipWriter'; +/** + * This ScoreExporter can write Guitar Pro 7 (gp) files. + */ +export class Gp7Exporter extends ScoreExporter { + public get name(): string { + return 'Guitar Pro 7'; + } + + public constructor() { + super(); + } + + public writeScore(score: Score): void { + Logger.debug(this.name, 'Writing data entries'); + const gpifWriter: GpifWriter = new GpifWriter(); + const gpifXml = gpifWriter.writeXml(score, this.settings); + const binaryStylesheet = BinaryStylesheet.writeForScore(score); + const partConfiguration = PartConfiguration.writeForScore(score); + + Logger.debug(this.name, 'Writing ZIP entries'); + let fileSystem: ZipWriter = new ZipWriter(this.data); + fileSystem.writeEntry(new ZipEntry('VERSION', IOHelper.stringToBytes('7.0', 'utf-8'))); + fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml, 'utf-8'))); + fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); + fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); + fileSystem.end(); + } +} diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts new file mode 100644 index 000000000..10ecf5b56 --- /dev/null +++ b/src/exporter/GpifWriter.ts @@ -0,0 +1,26 @@ +import { Score } from '@src/model/Score'; +import { Settings } from '@src/Settings'; +import { XmlDocument } from '@src/xml/XmlDocument'; +import { XmlNode, XmlNodeType } from '@src/xml/XmlNode'; + +/** + * This class can write a score.gpif XML from a given score model. + */ +export class GpifWriter { + // private _score!: Score; + // private _settings!: Settings; + private _xmlDocument!: XmlDocument; + + public writeXml(_score: Score, _settings: Settings): string { + // this._score = score; + // this._settings = settings; + this._xmlDocument = new XmlDocument(); + + this._xmlDocument.documentElement = new XmlNode(); + this._xmlDocument.documentElement.nodeType = XmlNodeType.Element; + this._xmlDocument.documentElement.localName = 'GPIF'; + // TODO GP7Export + + return this._xmlDocument.toString(' ', true); + } +} diff --git a/src/exporter/ScoreExporter.ts b/src/exporter/ScoreExporter.ts new file mode 100644 index 000000000..e1017bf4d --- /dev/null +++ b/src/exporter/ScoreExporter.ts @@ -0,0 +1,28 @@ +import { Settings } from '@src/alphatab'; +import { IWriteable } from '@src/io/IWriteable'; +import { Score } from '@src/model/Score'; + +/** + * This is the base class for creating new song exporters which + * enable writing scores to a binary datasink. + */ +export abstract class ScoreExporter { + protected data!: IWriteable; + protected settings!: Settings; + + /** + * Initializes the importer with the given data and settings. + */ + public init(data: IWriteable, settings: Settings): void { + this.data = data; + this.settings = settings; + } + + public abstract get name(): string; + + /** + * Writes the given score into the data sink. + * @returns The score to write. + */ + public abstract writeScore(score: Score): void; +} diff --git a/src/importer/BinaryStylesheet.ts b/src/importer/BinaryStylesheet.ts index b6f650117..22ce732b2 100644 --- a/src/importer/BinaryStylesheet.ts +++ b/src/importer/BinaryStylesheet.ts @@ -123,4 +123,9 @@ export class BinaryStylesheet { public addValue(key: string, value: unknown): void { this.raw.set(key, value); } + + public static writeForScore(score: Score): Uint8Array { + // TODO GP7Export + return new Uint8Array(0); + } } diff --git a/src/importer/CapellaImporter.ts b/src/importer/CapellaImporter.ts index fa3122e81..2441deeb2 100644 --- a/src/importer/CapellaImporter.ts +++ b/src/importer/CapellaImporter.ts @@ -5,7 +5,8 @@ import { Score } from '@src/model/Score'; import { Logger } from '@src/Logger'; -import { ZipEntry, ZipReader } from '@src/zip/ZipReader'; +import { ZipReader } from '@src/zip/ZipReader'; +import { ZipEntry } from "@src/zip/ZipEntry"; import { IOHelper } from '@src/io/IOHelper'; import { CapellaParser } from './CapellaParser'; diff --git a/src/importer/Gp7Importer.ts b/src/importer/Gp7Importer.ts index 5ac7dcd3e..aec1cbc97 100644 --- a/src/importer/Gp7Importer.ts +++ b/src/importer/Gp7Importer.ts @@ -8,7 +8,8 @@ import { Score } from '@src/model/Score'; import { Logger } from '@src/Logger'; -import { ZipEntry, ZipReader } from '@src/zip/ZipReader'; +import { ZipReader } from '@src/zip/ZipReader'; +import { ZipEntry } from "@src/zip/ZipEntry"; import { IOHelper } from '@src/io/IOHelper'; /** diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 604a2eb08..0c370f2f4 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -57,7 +57,7 @@ class GpifRhythm { } /** - * This public class can parse a score.gpif xml file into the model structure + * This class can parse a score.gpif xml file into the model structure */ export class GpifParser { private static readonly InvalidId: string = '-1'; diff --git a/src/importer/PartConfiguration.ts b/src/importer/PartConfiguration.ts index 7a91fb9fd..73a37782e 100644 --- a/src/importer/PartConfiguration.ts +++ b/src/importer/PartConfiguration.ts @@ -79,4 +79,9 @@ export class PartConfiguration { } } } + + public static writeForScore(score: Score): Uint8Array { + // TODO GP7Export + return new Uint8Array(0); + } } diff --git a/src/io/IOHelper.ts b/src/io/IOHelper.ts index 68d652e5f..115c8554a 100644 --- a/src/io/IOHelper.ts +++ b/src/io/IOHelper.ts @@ -1,6 +1,7 @@ import { IReadable } from '@src/io/IReadable'; import { TypeConversions } from '@src/io/TypeConversions'; import { Environment } from '@src/Environment'; +import { IWriteable } from './IWriteable'; export class IOHelper { public static readInt32BE(input: IReadable): number { @@ -154,7 +155,7 @@ export class IOHelper { return s; } } - + private static detectEncoding(data: Uint8Array): string | null { if (data.length > 2 && data[0] === 0xfe && data[1] === 0xff) { return 'utf-16be'; @@ -169,5 +170,22 @@ export class IOHelper { return 'utf-32le'; } return null; - } + } + + public static stringToBytes(s: string, encoding: string): Uint8Array { + // TODO GP7Export + return new Uint8Array(0); + } + + public static writeInt32LE(o: IWriteable, v: number) { + // TODO GP7Export + } + + public static writeUInt16LE(o: IWriteable, v: number) { + // TODO GP7Export + } + + public static writeInt16LE(o: IWriteable, v: number) { + // TODO GP7Export + } } diff --git a/src/zip/Deflate.ts b/src/zip/Deflate.ts new file mode 100644 index 000000000..defab8969 --- /dev/null +++ b/src/zip/Deflate.ts @@ -0,0 +1,4 @@ +export class Deflate { + public crc32: number = 0; + public compressedSize: number = 0; +} diff --git a/src/zip/ZipEntry.ts b/src/zip/ZipEntry.ts new file mode 100644 index 000000000..841003234 --- /dev/null +++ b/src/zip/ZipEntry.ts @@ -0,0 +1,18 @@ + +export class ZipEntry { + public static readonly OptionalDataDescriptorSignature: number = 0x08074b50; + public static readonly CompressionMethodDeflate: number = 8; + public static readonly LocalFileHeaderSignature: number = 0x04034b50; + + + public readonly fullName: string; + public readonly fileName: string; + public readonly data: Uint8Array; + + public constructor(fullName: string, data: Uint8Array) { + this.fullName = fullName; + let i: number = fullName.lastIndexOf('/'); + this.fileName = i === -1 || i === fullName.length - 1 ? this.fullName : fullName.substr(i + 1); + this.data = data; + } +} diff --git a/src/zip/ZipReader.ts b/src/zip/ZipReader.ts index 86fcbf41a..ea5f3f094 100644 --- a/src/zip/ZipReader.ts +++ b/src/zip/ZipReader.ts @@ -2,24 +2,9 @@ import { ByteBuffer } from '@src/io/ByteBuffer'; import { IOHelper } from '@src/io/IOHelper'; import { IReadable } from '@src/io/IReadable'; import { Inflate } from '@src/zip/Inflate'; - -export class ZipEntry { - public readonly fullName: string; - public readonly fileName: string; - public readonly data: Uint8Array; - - public constructor(fullName: string, data: Uint8Array) { - this.fullName = fullName; - let i: number = fullName.lastIndexOf('/'); - this.fileName = i === -1 || i === fullName.length - 1 ? this.fullName : fullName.substr(i + 1); - this.data = data; - } -} +import { ZipEntry } from './ZipEntry'; export class ZipReader { - private static readonly OptionalDataDescriptorSignature: number = 0x08074b50; - private static readonly CompressionMethodDeflate: number = 8; - private static readonly LocalFileHeaderSignature: number = 0x04034b50; private _readable: IReadable; @@ -42,7 +27,7 @@ export class ZipReader { private readEntry(): ZipEntry | null { let readable: IReadable = this._readable; let h: number = IOHelper.readInt32LE(readable); - if (h !== ZipReader.LocalFileHeaderSignature) { + if (h !== ZipEntry.LocalFileHeaderSignature) { return null; } // 4.3.7 local file header @@ -51,13 +36,13 @@ export class ZipReader { let flags: number = IOHelper.readUInt16LE(readable); let compressionMethod: number = IOHelper.readUInt16LE(readable); let compressed: boolean = compressionMethod !== 0; - if (compressed && compressionMethod !== ZipReader.CompressionMethodDeflate) { + if (compressed && compressionMethod !== ZipEntry.CompressionMethodDeflate) { return null; } - IOHelper.readInt16LE(this._readable); // lastModFileTime - IOHelper.readInt16LE(this._readable); // lastModFileDate - IOHelper.readInt32LE(readable); // crc32 + IOHelper.readInt16LE(this._readable); // last mod file time + IOHelper.readInt16LE(this._readable); // last mod file date + IOHelper.readInt32LE(readable); // crc-32 IOHelper.readInt32LE(readable); // compressed size let uncompressedSize: number = IOHelper.readInt32LE(readable); @@ -89,7 +74,7 @@ export class ZipReader { if ((flags & 8) !== 0) { let crc32: number = IOHelper.readInt32LE(this._readable); // 4.3.9.3 - if (crc32 === ZipReader.OptionalDataDescriptorSignature) { + if (crc32 === ZipEntry.OptionalDataDescriptorSignature) { IOHelper.readInt32LE(this._readable); // real crc } IOHelper.readInt32LE(this._readable); // compressed size diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts new file mode 100644 index 000000000..6a3cc1385 --- /dev/null +++ b/src/zip/ZipWriter.ts @@ -0,0 +1,67 @@ +import { IOHelper } from '@src/io/IOHelper'; +import { IWriteable } from '@src/io/IWriteable'; +import { Deflate } from './Deflate'; +import { ZipEntry } from './ZipEntry'; + +export class ZipWriter { + private _data: IWriteable; + + public constructor(data: IWriteable) { + this._data = data; + } + + public writeEntry(entry: ZipEntry) { + // 4.3.7 local file header + + // Signature + IOHelper.writeInt32LE(this._data, ZipEntry.LocalFileHeaderSignature); + // Version + IOHelper.writeUInt16LE(this._data, 20 /* File is compressed using Deflate compression */); + // Flags + IOHelper.writeUInt16LE(this._data, 1 << 3 /* sizes in descriptor header */); + // Compression + IOHelper.writeUInt16LE(this._data, ZipEntry.CompressionMethodDeflate); + // last mod file time + IOHelper.writeInt16LE(this._data, 0); + // last mod file date + IOHelper.writeInt16LE(this._data, 0); + // crc-32 + IOHelper.writeInt32LE(this._data, 0); + // compressed size + IOHelper.writeInt32LE(this._data, 0); + // uncompressed size + IOHelper.writeInt32LE(this._data, 0); + // file name length + IOHelper.writeInt16LE(this._data, entry.fullName.length); + // extra field length + IOHelper.writeInt16LE(this._data, 0); + // file name (variable size) + const fileNameBuffer = IOHelper.stringToBytes(entry.fullName, 'utf-8'); + this._data.write(fileNameBuffer, 0, fileNameBuffer.length); + // extra field (variable size) + // + + // 4.3.8 File Data + let z: Deflate = new Deflate(); + // let buffer: Uint8Array = new Uint8Array(65536); + // while (true) { + // let bytes: number = z.writeBytes(buffer, 0, buffer.length); + // this._data.write(buffer, 0, bytes); + // if (bytes < buffer.length) { + // break; + // } + // } + + // 4.3.9 Data Descriptor + // 4.3.9.1 + IOHelper.writeInt32LE(this._data, ZipEntry.OptionalDataDescriptorSignature); + // 4.3.9.3 + IOHelper.writeInt32LE(this._data, z.crc32); // real crc + IOHelper.writeInt32LE(this._data, z.compressedSize); // compressed size + IOHelper.writeInt32LE(this._data, entry.data.length); // uncompressed size + } + + public end() { + // TODO Central dictionary + } +} From 289b6277939775480d598a9b224baf5b2a674895 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 29 Nov 2020 21:18:27 +0100 Subject: [PATCH 03/31] Temporary uncompressed zippping --- src/exporter/Gp7Exporter.ts | 4 +- src/exporter/ScoreExporter.ts | 14 ++++++ src/importer/BinaryStylesheet.ts | 14 +++++- src/importer/Gp3To5Importer.ts | 18 +++++--- src/importer/PartConfiguration.ts | 5 ++- src/io/IOHelper.ts | 73 ++++++++++++++++++++++++++++--- src/zip/ZipWriter.ts | 34 +++++++++++--- 7 files changed, 138 insertions(+), 24 deletions(-) diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts index 40506cc25..73e3cec91 100644 --- a/src/exporter/Gp7Exporter.ts +++ b/src/exporter/Gp7Exporter.ts @@ -28,8 +28,8 @@ export class Gp7Exporter extends ScoreExporter { Logger.debug(this.name, 'Writing ZIP entries'); let fileSystem: ZipWriter = new ZipWriter(this.data); - fileSystem.writeEntry(new ZipEntry('VERSION', IOHelper.stringToBytes('7.0', 'utf-8'))); - fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml, 'utf-8'))); + fileSystem.writeEntry(new ZipEntry('VERSION', IOHelper.stringToBytes('7.0'))); + fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); fileSystem.end(); diff --git a/src/exporter/ScoreExporter.ts b/src/exporter/ScoreExporter.ts index e1017bf4d..569c5d705 100644 --- a/src/exporter/ScoreExporter.ts +++ b/src/exporter/ScoreExporter.ts @@ -1,4 +1,5 @@ import { Settings } from '@src/alphatab'; +import { ByteBuffer } from '@src/io/ByteBuffer'; import { IWriteable } from '@src/io/IWriteable'; import { Score } from '@src/model/Score'; @@ -18,6 +19,19 @@ export abstract class ScoreExporter { this.settings = settings; } + /** + * Exports the given score to a binary buffer. + * @param score The score to serialize + * @param settings The settings to use during serialization + * @returns A byte buffer with the serialized score. + */ + public export(score: Score, settings: Settings | null = null): Uint8Array { + const writable = ByteBuffer.withCapactiy(1024); + this.init(writable, settings ?? new Settings()); + this.writeScore(score); + return writable.toArray(); + } + public abstract get name(): string; /** diff --git a/src/importer/BinaryStylesheet.ts b/src/importer/BinaryStylesheet.ts index 22ce732b2..42fedb58d 100644 --- a/src/importer/BinaryStylesheet.ts +++ b/src/importer/BinaryStylesheet.ts @@ -125,7 +125,17 @@ export class BinaryStylesheet { } public static writeForScore(score: Score): Uint8Array { - // TODO GP7Export - return new Uint8Array(0); + const writer = ByteBuffer.withCapactiy(128); + IOHelper.writeInt32BE(writer, 1); // entry count + + BinaryStylesheet.writeBooleanEntry(writer, 'StandardNotation/hideDynamics', score.stylesheet.hideDynamics); + + return writer.toArray(); + } + + private static writeBooleanEntry(writer: ByteBuffer, key: string, value: boolean) { + GpBinaryHelpers.gpWriteString(writer, key); + writer.writeByte(DataType.Boolean as number); + writer.writeByte(value ? 1 : 0); } } diff --git a/src/importer/Gp3To5Importer.ts b/src/importer/Gp3To5Importer.ts index c1c3c7e51..b188515a0 100644 --- a/src/importer/Gp3To5Importer.ts +++ b/src/importer/Gp3To5Importer.ts @@ -39,6 +39,7 @@ import { Voice } from '@src/model/Voice'; import { Logger } from '@src/Logger'; import { ModelUtils } from '@src/model/ModelUtils'; +import { IWriteable } from '@src/io/IWriteable'; export class Gp3To5Importer extends ScoreImporter { private static readonly VersionString: string = 'FICHIER GUITAR PRO '; @@ -499,7 +500,6 @@ export class Gp3To5Importer extends ScoreImporter { if ((flags & 0x04) !== 0) { newBeat.text = GpBinaryHelpers.gpReadStringIntUnused(this.data, this.settings.importer.encoding); } - let allNoteHarmonicType = HarmonicType.None; if ((flags & 0x08) !== 0) { @@ -512,9 +512,9 @@ export class Gp3To5Importer extends ScoreImporter { for (let i: number = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) !== 0 && 6 - i < bar.staff.tuning.length) { const note = this.readNote(track, bar, voice, newBeat, 6 - i); - if(allNoteHarmonicType !== HarmonicType.None) { + if (allNoteHarmonicType !== HarmonicType.None) { note.harmonicType = allNoteHarmonicType; - if(note.harmonicType === HarmonicType.Natural) { + if (note.harmonicType === HarmonicType.Natural) { note.harmonicValue = this.deltaFretToHarmonicValue(note.fret); } } @@ -880,7 +880,7 @@ export class Gp3To5Importer extends ScoreImporter { this.readNoteEffects(track, voice, beat, newNote); } - if(bar.staff.isPercussion) { + if (bar.staff.isPercussion) { newNote.percussionArticulation = newNote.fret; newNote.string = -1; newNote.fret = -1; @@ -1178,7 +1178,7 @@ export class GpBinaryHelpers { bytes[2] = data.readByte(); bytes[2] = data.readByte(); bytes[1] = data.readByte(); - + let array: Float32Array = new Float32Array(bytes.buffer); return array[0]; } @@ -1231,6 +1231,12 @@ export class GpBinaryHelpers { return IOHelper.toString(b, encoding); } + public static gpWriteString(data: IWriteable, s: string): void { + const encoded = IOHelper.stringToBytes(s); + data.writeByte(s.length); + data.write(encoded, 0, encoded.length); + } + /** * Reads a byte as size and the string itself. * Additionally it is ensured the specified amount of bytes is read. @@ -1256,7 +1262,7 @@ class MixTableChange { public volume: number = -1; public balance: number = -1; public instrument: number = -1; - public tempoName: string = ""; + public tempoName: string = ''; public tempo: number = -1; public duration: number = -1; } diff --git a/src/importer/PartConfiguration.ts b/src/importer/PartConfiguration.ts index 73a37782e..a72386ae1 100644 --- a/src/importer/PartConfiguration.ts +++ b/src/importer/PartConfiguration.ts @@ -81,7 +81,8 @@ export class PartConfiguration { } public static writeForScore(score: Score): Uint8Array { - // TODO GP7Export - return new Uint8Array(0); + const writer = ByteBuffer.withCapactiy(0); + // TODO check for the right export of the settings. + return writer.toArray(); } } diff --git a/src/io/IOHelper.ts b/src/io/IOHelper.ts index 115c8554a..62c484ec2 100644 --- a/src/io/IOHelper.ts +++ b/src/io/IOHelper.ts @@ -172,20 +172,81 @@ export class IOHelper { return null; } - public static stringToBytes(s: string, encoding: string): Uint8Array { - // TODO GP7Export - return new Uint8Array(0); + public static stringToBytes(str: string): Uint8Array { + if (Environment.supportsTextDecoder) { + let decoder: TextEncoder = new TextEncoder(); + return decoder.encode(str); + } else { + // manual UTF8 decoding for older browsers + // https://developer.mozilla.org/de/docs/Web/API/TextEncoder + const Len = str.length; + let resPos = -1; + const resArr = new Uint8Array(Len * 3); + + for (let point = 0, nextcode = 0, i = 0; i !== Len; ) { + (point = str.charCodeAt(i)), (i += 1); + if (point >= 0xd800 && point <= 0xdbff) { + if (i === Len) { + resArr[(resPos += 1)] = 0xef /*0b11101111*/; + resArr[(resPos += 1)] = 0xbf /*0b10111111*/; + resArr[(resPos += 1)] = 0xbd /*0b10111101*/; + break; + } + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + nextcode = str.charCodeAt(i); + if (nextcode >= 0xdc00 && nextcode <= 0xdfff) { + point = (point - 0xd800) * 0x400 + nextcode - 0xdc00 + 0x10000; + i += 1; + if (point > 0xffff) { + resArr[(resPos += 1)] = (0x1e /*0b11110*/ << 3) | (point >>> 18); + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | ((point >>> 12) & 0x3f) /*0b00111111*/; + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | ((point >>> 6) & 0x3f) /*0b00111111*/; + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/; + continue; + } + } else { + resArr[(resPos += 1)] = 0xef /*0b11101111*/; + resArr[(resPos += 1)] = 0xbf /*0b10111111*/; + resArr[(resPos += 1)] = 0xbd /*0b10111101*/; + continue; + } + } + if (point <= 0x007f) { + resArr[(resPos += 1)] = (0x0 /*0b0*/ << 7) | point; + } else if (point <= 0x07ff) { + resArr[(resPos += 1)] = (0x6 /*0b110*/ << 5) | (point >>> 6); + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/; + } else { + resArr[(resPos += 1)] = (0xe /*0b1110*/ << 4) | (point >>> 12); + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | ((point >>> 6) & 0x3f) /*0b00111111*/; + resArr[(resPos += 1)] = (0x2 /*0b10*/ << 6) | (point & 0x3f) /*0b00111111*/; + } + } + return resArr.subarray(0, resPos + 1); + } + } + + public static writeInt32BE(o: IWriteable, v: number) { + o.writeByte((v >> 24) & 0xFF); + o.writeByte((v >> 16) & 0xFF); + o.writeByte((v >> 8) & 0xFF); + o.writeByte((v >> 0) & 0xFF); } public static writeInt32LE(o: IWriteable, v: number) { - // TODO GP7Export + o.writeByte((v >> 0) & 0xFF); + o.writeByte((v >> 8) & 0xFF); + o.writeByte((v >> 16) & 0xFF); + o.writeByte((v >> 24) & 0xFF); } public static writeUInt16LE(o: IWriteable, v: number) { - // TODO GP7Export + o.writeByte((v >> 0) & 0xFF); + o.writeByte((v >> 8) & 0xFF); } public static writeInt16LE(o: IWriteable, v: number) { - // TODO GP7Export + o.writeByte((v >> 8) & 0xFF); + o.writeByte((v >> 0) & 0xFF); } } diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index 6a3cc1385..c2cdceb1a 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -1,6 +1,5 @@ import { IOHelper } from '@src/io/IOHelper'; import { IWriteable } from '@src/io/IWriteable'; -import { Deflate } from './Deflate'; import { ZipEntry } from './ZipEntry'; export class ZipWriter { @@ -20,7 +19,7 @@ export class ZipWriter { // Flags IOHelper.writeUInt16LE(this._data, 1 << 3 /* sizes in descriptor header */); // Compression - IOHelper.writeUInt16LE(this._data, ZipEntry.CompressionMethodDeflate); + IOHelper.writeUInt16LE(this._data, /*ZipEntry.CompressionMethodDeflate*/ 0); // last mod file time IOHelper.writeInt16LE(this._data, 0); // last mod file date @@ -36,13 +35,15 @@ export class ZipWriter { // extra field length IOHelper.writeInt16LE(this._data, 0); // file name (variable size) - const fileNameBuffer = IOHelper.stringToBytes(entry.fullName, 'utf-8'); + const fileNameBuffer = IOHelper.stringToBytes(entry.fullName); this._data.write(fileNameBuffer, 0, fileNameBuffer.length); // extra field (variable size) // // 4.3.8 File Data - let z: Deflate = new Deflate(); + // TODO Compression + this._data.write(entry.data, 0, entry.data.length); + // let z: Deflate = new Deflate(); // let buffer: Uint8Array = new Uint8Array(65536); // while (true) { // let bytes: number = z.writeBytes(buffer, 0, buffer.length); @@ -56,11 +57,32 @@ export class ZipWriter { // 4.3.9.1 IOHelper.writeInt32LE(this._data, ZipEntry.OptionalDataDescriptorSignature); // 4.3.9.3 - IOHelper.writeInt32LE(this._data, z.crc32); // real crc - IOHelper.writeInt32LE(this._data, z.compressedSize); // compressed size + IOHelper.writeInt32LE(this._data, ZipWriter.crc32(entry.data)); // real crc + IOHelper.writeInt32LE(this._data, entry.data.length); // compressed size IOHelper.writeInt32LE(this._data, entry.data.length); // uncompressed size } + private static readonly Crc32Lookup: Uint32Array = ZipWriter.buildCrc32Lookup(); + private static buildCrc32Lookup(): Uint32Array { + const poly = 0xedb88320; + const lookup = new Uint32Array(256); + lookup.forEach((_, i, self) => { + let crc = i; + for (let bit = 0; bit < 8; bit++) { + crc = crc & 1 ? (crc >>> 1) ^ poly : crc >>> 1; + } + self[i] = crc; + }); + + return lookup; + } + + // TypeScript definition, for reference. + // export default function crc32( data: Buffer | Uint8Array | number[] ) { + private static crc32(input: Uint8Array) { + return ~input.reduce((crc, byte) => ZipWriter.Crc32Lookup[(crc ^ byte) & 0xff] ^ (crc >>> 8), 0xffffffff); + } + public end() { // TODO Central dictionary } From 7650c61fc185f2852e8f05721fbdd3cf084b715e Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 30 Nov 2020 01:00:34 +0100 Subject: [PATCH 04/31] Finished uncompressed zip writing --- src/exporter/Gp7Exporter.ts | 1 + src/exporter/ScoreExporter.ts | 2 +- src/importer/BinaryStylesheet.ts | 2 +- src/importer/GpxFileSystem.ts | 2 +- src/importer/PartConfiguration.ts | 2 +- src/io/ByteBuffer.ts | 8 +- src/io/IOHelper.ts | 2 +- src/io/IWriteable.ts | 6 ++ src/xml/XmlWriter.ts | 5 +- src/zip/ZipEntry.ts | 2 + src/zip/ZipWriter.ts | 131 ++++++++++++++++++++++++------ 11 files changed, 128 insertions(+), 35 deletions(-) diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts index 73e3cec91..c89463086 100644 --- a/src/exporter/Gp7Exporter.ts +++ b/src/exporter/Gp7Exporter.ts @@ -29,6 +29,7 @@ export class Gp7Exporter extends ScoreExporter { Logger.debug(this.name, 'Writing ZIP entries'); let fileSystem: ZipWriter = new ZipWriter(this.data); fileSystem.writeEntry(new ZipEntry('VERSION', IOHelper.stringToBytes('7.0'))); + fileSystem.writeEntry(new ZipEntry('Content/', new Uint8Array(0))); fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); diff --git a/src/exporter/ScoreExporter.ts b/src/exporter/ScoreExporter.ts index 569c5d705..87e03743f 100644 --- a/src/exporter/ScoreExporter.ts +++ b/src/exporter/ScoreExporter.ts @@ -26,7 +26,7 @@ export abstract class ScoreExporter { * @returns A byte buffer with the serialized score. */ public export(score: Score, settings: Settings | null = null): Uint8Array { - const writable = ByteBuffer.withCapactiy(1024); + const writable = ByteBuffer.withCapacity(1024); this.init(writable, settings ?? new Settings()); this.writeScore(score); return writable.toArray(); diff --git a/src/importer/BinaryStylesheet.ts b/src/importer/BinaryStylesheet.ts index 42fedb58d..05a09058d 100644 --- a/src/importer/BinaryStylesheet.ts +++ b/src/importer/BinaryStylesheet.ts @@ -125,7 +125,7 @@ export class BinaryStylesheet { } public static writeForScore(score: Score): Uint8Array { - const writer = ByteBuffer.withCapactiy(128); + const writer = ByteBuffer.withCapacity(128); IOHelper.writeInt32BE(writer, 1); // entry count BinaryStylesheet.writeBooleanEntry(writer, 'StandardNotation/hideDynamics', score.stylesheet.hideDynamics); diff --git a/src/importer/GpxFileSystem.ts b/src/importer/GpxFileSystem.ts index 639e56f53..ab99bdc27 100644 --- a/src/importer/GpxFileSystem.ts +++ b/src/importer/GpxFileSystem.ts @@ -175,7 +175,7 @@ export class GpxFileSystem { let sectorCount: number = 0; // we're keeping count so we can calculate the offset of the array item // as long we have data blocks we need to iterate them, - let fileData: ByteBuffer | null = storeFile ? ByteBuffer.withCapactiy(file.fileSize) : null; + let fileData: ByteBuffer | null = storeFile ? ByteBuffer.withCapacity(file.fileSize) : null; // tslint:disable-next-line: no-conditional-assignment while ((sector = this.getInteger(data, dataPointerOffset + 4 * sectorCount++)) !== 0) { // the next file entry starts after the last data sector so we diff --git a/src/importer/PartConfiguration.ts b/src/importer/PartConfiguration.ts index a72386ae1..8a07683a0 100644 --- a/src/importer/PartConfiguration.ts +++ b/src/importer/PartConfiguration.ts @@ -81,7 +81,7 @@ export class PartConfiguration { } public static writeForScore(score: Score): Uint8Array { - const writer = ByteBuffer.withCapactiy(0); + const writer = ByteBuffer.withCapacity(0); // TODO check for the right export of the settings. return writer.toArray(); } diff --git a/src/io/ByteBuffer.ts b/src/io/ByteBuffer.ts index a78ddb142..aef6cc979 100644 --- a/src/io/ByteBuffer.ts +++ b/src/io/ByteBuffer.ts @@ -8,15 +8,19 @@ export class ByteBuffer implements IWriteable, IReadable { public length: number = 0; public position: number = 0; + public get bytesWritten(): number { + return this.position; + } + public getBuffer(): Uint8Array { return this._buffer; } public static empty(): ByteBuffer { - return ByteBuffer.withCapactiy(0); + return ByteBuffer.withCapacity(0); } - public static withCapactiy(capacity: number): ByteBuffer { + public static withCapacity(capacity: number): ByteBuffer { let buffer: ByteBuffer = new ByteBuffer(); buffer._buffer = new Uint8Array(capacity); buffer._capacity = capacity; diff --git a/src/io/IOHelper.ts b/src/io/IOHelper.ts index 62c484ec2..6b4a74f9b 100644 --- a/src/io/IOHelper.ts +++ b/src/io/IOHelper.ts @@ -246,7 +246,7 @@ export class IOHelper { } public static writeInt16LE(o: IWriteable, v: number) { - o.writeByte((v >> 8) & 0xFF); o.writeByte((v >> 0) & 0xFF); + o.writeByte((v >> 8) & 0xFF); } } diff --git a/src/io/IWriteable.ts b/src/io/IWriteable.ts index 3dfdb12d6..569ac6311 100644 --- a/src/io/IWriteable.ts +++ b/src/io/IWriteable.ts @@ -2,6 +2,12 @@ * Represents a writer where binary data can be written to. */ export interface IWriteable { + + /** + * Gets the current number of written bytes. + */ + readonly bytesWritten:number; + /** * Write a single byte to the stream. * @param value The value to write. diff --git a/src/xml/XmlWriter.ts b/src/xml/XmlWriter.ts index 64719359d..7f3673bd7 100644 --- a/src/xml/XmlWriter.ts +++ b/src/xml/XmlWriter.ts @@ -1,3 +1,4 @@ +import { XmlDocument } from './XmlDocument'; import { XmlNode, XmlNodeType } from './XmlNode'; export class XmlWriter { @@ -72,9 +73,7 @@ export class XmlWriter { if (this._xmlHeader) { this.write(''); } - for (const child of xml.childNodes) { - this.writeNode(child); - } + this.writeNode((xml as XmlDocument).documentElement!); break; case XmlNodeType.DocumentType: this.write(``); diff --git a/src/zip/ZipEntry.ts b/src/zip/ZipEntry.ts index 841003234..b5f42d0a8 100644 --- a/src/zip/ZipEntry.ts +++ b/src/zip/ZipEntry.ts @@ -3,6 +3,8 @@ export class ZipEntry { public static readonly OptionalDataDescriptorSignature: number = 0x08074b50; public static readonly CompressionMethodDeflate: number = 8; public static readonly LocalFileHeaderSignature: number = 0x04034b50; + public static readonly CentralFileHeaderSignature: number = 0x02014b50; + public static readonly EndOfCentralDirSignature: number = 0x06054b50; public readonly fullName: string; diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index c2cdceb1a..c831c34fc 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -2,8 +2,21 @@ import { IOHelper } from '@src/io/IOHelper'; import { IWriteable } from '@src/io/IWriteable'; import { ZipEntry } from './ZipEntry'; +class ZipCentralDirectoryHeader { + public entry: ZipEntry; + public localHeaderOffset: number; + public crc32: number; + + public constructor(entry: ZipEntry, crc32: number, localHeaderOffset: number) { + this.entry = entry; + this.crc32 = crc32; + this.localHeaderOffset = localHeaderOffset; + } +} + export class ZipWriter { private _data: IWriteable; + private _centralDirectoryHeaders: ZipCentralDirectoryHeader[] = []; public constructor(data: IWriteable) { this._data = data; @@ -12,24 +25,27 @@ export class ZipWriter { public writeEntry(entry: ZipEntry) { // 4.3.7 local file header + const crc32 = ZipWriter.crc32(entry.data); + this._centralDirectoryHeaders.push(new ZipCentralDirectoryHeader(entry, crc32, this._data.bytesWritten)); + // Signature IOHelper.writeInt32LE(this._data, ZipEntry.LocalFileHeaderSignature); // Version - IOHelper.writeUInt16LE(this._data, 20 /* File is compressed using Deflate compression */); + IOHelper.writeUInt16LE(this._data, 10); // Flags - IOHelper.writeUInt16LE(this._data, 1 << 3 /* sizes in descriptor header */); + IOHelper.writeUInt16LE(this._data, 0); // Compression - IOHelper.writeUInt16LE(this._data, /*ZipEntry.CompressionMethodDeflate*/ 0); + IOHelper.writeUInt16LE(this._data, 0); // last mod file time IOHelper.writeInt16LE(this._data, 0); // last mod file date IOHelper.writeInt16LE(this._data, 0); // crc-32 - IOHelper.writeInt32LE(this._data, 0); + IOHelper.writeInt32LE(this._data, crc32); // compressed size - IOHelper.writeInt32LE(this._data, 0); + IOHelper.writeInt32LE(this._data, entry.data.length); // uncompressed size - IOHelper.writeInt32LE(this._data, 0); + IOHelper.writeInt32LE(this._data, entry.data.length); // file name length IOHelper.writeInt16LE(this._data, entry.fullName.length); // extra field length @@ -41,25 +57,7 @@ export class ZipWriter { // // 4.3.8 File Data - // TODO Compression this._data.write(entry.data, 0, entry.data.length); - // let z: Deflate = new Deflate(); - // let buffer: Uint8Array = new Uint8Array(65536); - // while (true) { - // let bytes: number = z.writeBytes(buffer, 0, buffer.length); - // this._data.write(buffer, 0, bytes); - // if (bytes < buffer.length) { - // break; - // } - // } - - // 4.3.9 Data Descriptor - // 4.3.9.1 - IOHelper.writeInt32LE(this._data, ZipEntry.OptionalDataDescriptorSignature); - // 4.3.9.3 - IOHelper.writeInt32LE(this._data, ZipWriter.crc32(entry.data)); // real crc - IOHelper.writeInt32LE(this._data, entry.data.length); // compressed size - IOHelper.writeInt32LE(this._data, entry.data.length); // uncompressed size } private static readonly Crc32Lookup: Uint32Array = ZipWriter.buildCrc32Lookup(); @@ -84,6 +82,89 @@ export class ZipWriter { } public end() { - // TODO Central dictionary + const startOfCentralDirectory = this._data.bytesWritten; + for (const header of this._centralDirectoryHeaders) { + this.writeCentralDirectoryHeader(header); + } + const endOfCentralDirectory = this._data.bytesWritten; + + this.writeEndOfCentralDirectoryRecord(startOfCentralDirectory, endOfCentralDirectory); + } + + private writeEndOfCentralDirectoryRecord(startOfCentralDirectory: number, endOfCentralDirectory: number) { + // Signature + IOHelper.writeInt32LE(this._data, ZipEntry.EndOfCentralDirSignature); + // number of this disk 2 bytes + IOHelper.writeInt16LE(this._data, 0); + + // number of the disk with the + // start of the central directory 2 bytes + IOHelper.writeInt16LE(this._data, 0); + + // total number of entries in the + // central directory on this disk 2 bytes + IOHelper.writeInt16LE(this._data, this._centralDirectoryHeaders.length); + + // total number of entries in + // the central directory 2 bytes + IOHelper.writeInt16LE(this._data, this._centralDirectoryHeaders.length); + + // size of the central directory 4 bytes + IOHelper.writeInt32LE(this._data, endOfCentralDirectory - startOfCentralDirectory); + + // offset of start of central + // directory with respect to + // the starting disk number 4 bytes + IOHelper.writeInt32LE(this._data, startOfCentralDirectory); + + // .ZIP file comment length 2 bytes + IOHelper.writeInt16LE(this._data, 0); + + // .ZIP file comment (variable size) + // + } + + private writeCentralDirectoryHeader(header: ZipCentralDirectoryHeader) { + // Signature + IOHelper.writeInt32LE(this._data, ZipEntry.CentralFileHeaderSignature); + // version made by + IOHelper.writeUInt16LE(this._data, 10); + // version needed to extract + IOHelper.writeUInt16LE(this._data, 10); + // Flags + IOHelper.writeUInt16LE(this._data, 0); + // Compression + IOHelper.writeUInt16LE(this._data, 0); + // last mod file time + IOHelper.writeInt16LE(this._data, 0); + // last mod file date + IOHelper.writeInt16LE(this._data, 0); + // crc-32 + IOHelper.writeInt32LE(this._data, header.crc32); + // compressed size + IOHelper.writeInt32LE(this._data, header.entry.data.length); + // uncompressed size + IOHelper.writeInt32LE(this._data, header.entry.data.length); + // file name length + IOHelper.writeInt16LE(this._data, header.entry.fullName.length); + // extra field length + IOHelper.writeInt16LE(this._data, 0); + // file comment length + IOHelper.writeInt16LE(this._data, 0); + // disk number start + IOHelper.writeInt16LE(this._data, 0); + // internal file attributes + IOHelper.writeInt16LE(this._data, 0); + // external file attributes + IOHelper.writeInt32LE(this._data, 0); + // relative offset of local header + IOHelper.writeInt32LE(this._data, header.localHeaderOffset); + // file name (variable size) + const fileNameBuffer = IOHelper.stringToBytes(header.entry.fullName); + this._data.write(fileNameBuffer, 0, fileNameBuffer.length); + // extra field (variable size) + // + // file comment (variable size) + // } } From e7024f67eac5f4a332ced7c0fb878420a1803c65 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Tue, 1 Dec 2020 15:32:19 +0100 Subject: [PATCH 05/31] Fix test --- src/xml/XmlWriter.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/xml/XmlWriter.ts b/src/xml/XmlWriter.ts index 7f3673bd7..9eefbff55 100644 --- a/src/xml/XmlWriter.ts +++ b/src/xml/XmlWriter.ts @@ -73,7 +73,9 @@ export class XmlWriter { if (this._xmlHeader) { this.write(''); } - this.writeNode((xml as XmlDocument).documentElement!); + for (const child of xml.childNodes) { + this.writeNode(child); + } break; case XmlNodeType.DocumentType: this.write(``); From ac8991a65e31ba80097c8a420870842a0858f3d0 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Thu, 3 Dec 2020 23:35:34 +0100 Subject: [PATCH 06/31] Further WIP --- src/exporter/GpifWriter.ts | 692 ++++++++++++++++++++++++++++++- src/importer/CapellaParser.ts | 2 +- src/importer/GpifParser.ts | 28 +- src/importer/MusicXmlImporter.ts | 2 +- src/model/Voice.ts | 7 + src/xml/XmlDocument.ts | 8 - src/xml/XmlNode.ts | 23 + test/xml/XmlParse.test.ts | 106 ++--- test/xml/XmllWrite.test.ts | 10 +- 9 files changed, 783 insertions(+), 95 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 10ecf5b56..e867df53f 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1,26 +1,690 @@ +import { MidiUtils } from '@src/midi/MidiUtils'; +import { Bar } from '@src/model/Bar'; +import { Beat } from '@src/model/Beat'; +import { BrushType } from '@src/model/BrushType'; +import { Clef } from '@src/model/Clef'; +import { CrescendoType } from '@src/model/CrescendoType'; +import { Duration } from '@src/model/Duration'; +import { DynamicValue } from '@src/model/DynamicValue'; +import { Fermata, FermataType } from '@src/model/Fermata'; +import { GraceType } from '@src/model/GraceType'; +import { KeySignatureType } from '@src/model/KeySignatureType'; +import { Lyrics } from '@src/model/Lyrics'; +import { MasterBar } from '@src/model/MasterBar'; +import { Note } from '@src/model/Note'; +import { Ottavia } from '@src/model/Ottavia'; import { Score } from '@src/model/Score'; -import { Settings } from '@src/Settings'; +import { SimileMark } from '@src/model/SimileMark'; +import { Staff } from '@src/model/Staff'; +import { Track } from '@src/model/Track'; +import { TripletFeel } from '@src/model/TripletFeel'; +import { Voice } from '@src/model/Voice'; +import { BeamDirection } from '@src/rendering/utils/BeamDirection'; import { XmlDocument } from '@src/xml/XmlDocument'; -import { XmlNode, XmlNodeType } from '@src/xml/XmlNode'; +import { XmlNode } from '@src/xml/XmlNode'; /** * This class can write a score.gpif XML from a given score model. */ export class GpifWriter { - // private _score!: Score; - // private _settings!: Settings; - private _xmlDocument!: XmlDocument; + private _rhythmIdLookup: Map = new Map(); - public writeXml(_score: Score, _settings: Settings): string { - // this._score = score; - // this._settings = settings; - this._xmlDocument = new XmlDocument(); + public writeXml(score: Score): string { + const xmlDocument = new XmlDocument(); - this._xmlDocument.documentElement = new XmlNode(); - this._xmlDocument.documentElement.nodeType = XmlNodeType.Element; - this._xmlDocument.documentElement.localName = 'GPIF'; - // TODO GP7Export + this._rhythmIdLookup = new Map() - return this._xmlDocument.toString(' ', true); + this.writeDom(xmlDocument, score); + + return xmlDocument.toString(' ', true); + } + + private writeDom(parent: XmlNode, score: Score) { + const gpif = parent.addElement('GPIF'); + + // just some values at the time this was implemented, + gpif.addElement('GPVersion').innerText = '7'; + const gpRevision = gpif.addElement('GPRevision'); + gpRevision.innerText = '7'; + gpRevision.attributes.set('required', '12021'); + gpRevision.attributes.set('recommended', '12023'); + gpRevision.innerText = '12025'; + gpif.addElement('Encoding').addElement('EncodingDescription').innerText = 'GP7'; + + this.writeScoreNode(gpif, score); + this.writeMasterTrackNode(gpif, score); + this.writeAudioTracksNode(gpif, score); + this.writeTracksNode(gpif, score); + this.writeMasterBarsNode(gpif, score); + + const bars = gpif.addElement('Bars'); + const voices = gpif.addElement('Voice'); + const beats = gpif.addElement('Beats'); + const notes = gpif.addElement('Notes'); + const rhythms = gpif.addElement('Rhythms'); + + for (const tracks of score.tracks) { + + for (const staff of tracks.staves) { + + for (const bar of staff.bars) { + + this.writeBarNode(bars, bar); + + for (const voice of bar.voices) { + this.writeVoiceNode(voices, voice); + + for (const beat of voice.beats) { + this.writeBeatNode(beats, beat, rhythms); + + for (const note of beat.notes) { + this.writeNoteNode(notes, note); + } + } + } + } + } + } + } + + private writeNoteNode(parent: XmlNode, note: Note) { + const noteNode = parent.addElement('Note'); + noteNode.attributes.set('id', note.id.toString()); + } + + private writeBeatNode(parent: XmlNode, beat: Beat, rhythms: XmlNode) { + const beatNode = parent.addElement('Beat'); + beatNode.attributes.set('id', beat.id.toString()); + + beatNode.addElement('Dynamic').innerText = DynamicValue[beat.dynamics]; + if (beat.fadeIn) { + beatNode.addElement('Fadding').innerText = 'FadeIn'; + } + if (beat.isTremolo) { + switch (beat.tremoloSpeed) { + case Duration.Eighth: + beatNode.addElement('Tremolo').innerText = '1/2'; + break; + case Duration.Sixteenth: + beatNode.addElement('Tremolo').innerText = '1/4'; + break; + case Duration.ThirtySecond: + beatNode.addElement('Tremolo').innerText = '1/8'; + break; + } + } + if (beat.hasChord) { + beatNode.addElement('Chord').innerText = beat.chordId!; + } + if (beat.crescendo !== CrescendoType.None) { + beatNode.addElement('Hairpin').innerText = CrescendoType[beat.crescendo]; + } + switch (beat.brushType) { + case BrushType.ArpeggioUp: + beatNode.addElement('Arpeggio').innerText = 'Up'; + break; + case BrushType.ArpeggioDown: + beatNode.addElement('Arpeggio').innerText = 'Down'; + break; + } + if (beat.text) { + beatNode.addElement('FreeText').setCData(beat.text); + } + switch (beat.graceType) { + case GraceType.OnBeat: + case GraceType.BeforeBeat: + beatNode.addElement('GraceNotes').innerText = GraceType[beat.graceType]; + break; + } + if (beat.ottava !== Ottavia.Regular) { + beatNode.addElement('Ottavia').innerText = Ottavia[beat.ottava].substr(1); + } + if (beat.hasWhammyBar) { + this.writeWhammyNode(beatNode, beat); + } + + if (beat.isLegatoOrigin || beat.isLegatoDestination) { + const legato = beatNode.addElement('Legato'); + legato.attributes.set('origin', beat.isLegatoOrigin ? 'true' : 'false'); + legato.attributes.set('destination', beat.isLegatoDestination ? 'true' : 'false'); + } + + this.writeRhythm(beatNode, beat, rhythms); + + if (beat.preferredBeamDirection !== null) { + switch (beat.preferredBeamDirection) { + case BeamDirection.Up: + beatNode.addElement('TransposedPitchStemOrientation').innerText = 'Upward'; + break; + case BeamDirection.Down: + beatNode.addElement('TransposedPitchStemOrientation').innerText = 'Downward'; + break; + } + } + + beatNode.addElement('ConcertPitchStemOrientation').innerText = 'Undefined'; + beatNode.addElement('Notes').innerText = beat.notes.map(n => n.id).join(' '); + + beatNode.addElement('Properties'); + } + + private writeRhythm(parent: XmlNode, beat: Beat, rhythms: XmlNode) { + + const rhythmId = `${beat.duration}_${beat.dots}_${beat.tupletNumerator}_${beat.tupletDenominator}';` + + let rhythm: string; + if (!this._rhythmIdLookup.has(rhythmId)) { + + rhythm = this._rhythmIdLookup.size.toString(); + this._rhythmIdLookup.set(rhythmId, rhythm); + + const rhythmNode = rhythms.addElement('Rhythm'); + rhythmNode.attributes.set('id', rhythm); + + if (beat.hasTuplet) { + const tupletNode = rhythmNode.addElement('PrimaryTuplet'); + tupletNode.attributes.set('num', beat.tupletNumerator.toString()); + tupletNode.attributes.set('den', beat.tupletDenominator.toString()); + } + if (beat.dots > 0) { + rhythmNode.addElement('AugmentationDot').attributes.set('count', beat.dots.toString()); + } + + let noteValue = 'Quarter'; + switch (beat.duration) { + case Duration.QuadrupleWhole: + noteValue = 'Long'; + break; + case Duration.DoubleWhole: + noteValue = 'DoubleWhole'; + break; + case Duration.Whole: + noteValue = 'Whole'; + break; + case Duration.Half: + noteValue = 'Half'; + break; + case Duration.Quarter: + noteValue = 'Quarter'; + break; + case Duration.Eighth: + noteValue = 'Eighth'; + break; + case Duration.Sixteenth: + noteValue = '16th'; + break; + case Duration.ThirtySecond: + noteValue = '32nd'; + break; + case Duration.SixtyFourth: + noteValue = '64th'; + break; + case Duration.OneHundredTwentyEighth: + noteValue = '128th'; + break; + case Duration.TwoHundredFiftySixth: + noteValue = '256th'; + break; + } + rhythmNode.addElement('NoteValue').innerText = noteValue + } else { + rhythm = this._rhythmIdLookup.get(rhythmId)!; + } + + parent.addElement('Rhythm').attributes.set('ref', rhythm); + } + + private writeWhammyNode(_parent: XmlNode, _beat: Beat) { + // TODO: whammy + } + + private writeScoreNode(parent: XmlNode, score: Score) { + const scoreNode = parent.addElement('Score'); + + scoreNode.addElement('Title').setCData(score.title); + scoreNode.addElement('SubTitle').setCData(score.subTitle); + scoreNode.addElement('Artist').setCData(score.artist); + scoreNode.addElement('Album').setCData(score.album); + scoreNode.addElement('Words').setCData(score.words); + scoreNode.addElement('Music').setCData(score.music); + scoreNode.addElement('WordsAndMusic').setCData(score.words === score.music ? score.words : ''); + scoreNode.addElement('Copyright').setCData(score.copyright); + scoreNode.addElement('Tabber').setCData(score.tab); + scoreNode.addElement('Instructions').setCData(score.instructions); + scoreNode.addElement('Notices').setCData(score.notices); + scoreNode.addElement('FirstPageHeader').setCData(''); + scoreNode.addElement('FirstPageFooter').setCData(''); + scoreNode.addElement('PageHeader').setCData(''); + scoreNode.addElement('PageFooter').setCData(''); + + // TODO: find out right avlues + scoreNode.addElement('ScoreSystemsDefaultLayout').setCData('2'); + scoreNode.addElement('ScoreSystemsLayout').setCData('2 2 2 2 2 2 2'); + + scoreNode.addElement('ScoreZoomPolicy').setCData('Value'); + scoreNode.addElement('ScoreZoom').setCData('1'); + // not fully clear at this point so we rather activate it + scoreNode.addElement('MultiVoice').setCData('1>'); + } + + private writeMasterTrackNode(parent: XmlNode, score: Score) { + const masterTrackNode = parent.addElement('MasterTrack'); + + masterTrackNode.addElement('Tracks').innerText = score.tracks.map(t => t.index).join(' '); + + const automations = masterTrackNode.addElement('Automations'); + + if (score.masterBars.length > 0 && score.masterBars[0].isAnacrusis) { + masterTrackNode.addElement('Anacrusis'); + } + + for (const mb of score.masterBars) { + if (mb.tempoAutomation) { + const tempoAutomation = automations.addElement('Automation'); + tempoAutomation.addElement('Type').innerText = 'Tempo'; + tempoAutomation.addElement('Linear').innerText = 'true'; + tempoAutomation.addElement('Bar').innerText = mb.index.toString(); + tempoAutomation.addElement('Position').innerText = mb.tempoAutomation.ratioPosition.toString(); + tempoAutomation.addElement('Visible').innerText = 'true'; + tempoAutomation.addElement('Value').innerText = `${mb.tempoAutomation.value} 2`; + } + } + } + + private writeAudioTracksNode(parent: XmlNode, score: Score) { + parent.addElement('AudioTracks'); + } + + private writeTracksNode(parent: XmlNode, score: Score) { + const tracksNode = parent.addElement('Tracks'); + + for (const track of score.tracks) { + this.writeTrackNode(tracksNode, track); + } + } + + private writeTrackNode(parent: XmlNode, track: Track) { + const trackNode = parent.addElement('Track'); + trackNode.attributes.set('id', track.index.toString()); + + trackNode.addElement('Name').setCData(track.name); + trackNode.addElement('ShortName').setCData(track.shortName); + trackNode.addElement('Color').innerText = `${track.color.r} ${track.color.g} ${track.color.b}`; + + // TODO right value + trackNode.addElement('SystemsDefautLayout').innerText = "3"; + trackNode.addElement('SystemsLayout').innerText = "2 2 3 2 2 2 1"; + trackNode.addElement('SystemsLayout').innerText = "2 2 3 2 2 2 1"; + + trackNode.addElement('AutoBrush'); + trackNode.addElement('PalmMute').innerText = '0'; + + // TODO: StringedPick for guitars + trackNode.addElement('PlayingStyle').innerText = 'Default'; + trackNode.addElement('UseOneChannelPerString'); + + // TODO right values + trackNode.addElement('IconId').innerText = '8'; + + this.writeInstrumentSetNode(trackNode, track); + // TODO write notationpatch + this.writeTransposeNode(trackNode, track); + + this.writeRseNode(trackNode, track); + + // TODO right values + trackNode.addElement('ForcedSound').innerText = '-1'; + + this.writeSoundsNode(trackNode, track); + this.writeMidiConnectionNode(trackNode, track); + + if (track.playbackInfo.isSolo) { + trackNode.addElement('PlaybackState').innerText = 'Solo'; + } else if (track.playbackInfo.isMute) { + trackNode.addElement('PlaybackState').innerText = 'Mute'; + } else { + trackNode.addElement('PlaybackState').innerText = 'Default'; + } + + trackNode.addElement('AudioEngineState').innerText = 'MIDI'; + + this.writeLyricsNode(trackNode, track); + + this.writeStavesNode(trackNode, track); + + this.writeAutomations(trackNode, track); + } + + private writeAutomations(trackNode: XmlNode, _track: Track) { + trackNode.addElement('Automations'); + // TODO: instrument automations + } + + private writeMidiConnectionNode(trackNode: XmlNode, track: Track) { + const midiConnection = trackNode.addElement('MidiConnection'); + midiConnection.addElement('Port').innerText = track.playbackInfo.port.toString(); + midiConnection.addElement('PrimaryChannel').innerText = track.playbackInfo.primaryChannel.toString(); + midiConnection.addElement('SecondaryChannel').innerText = track.playbackInfo.secondaryChannel.toString(); + midiConnection.addElement('ForeOneChannelPerString').innerText = 'false'; + } + + private writeRseNode(trackNode: XmlNode, track: Track) { + const rse = trackNode.addElement('RSE'); + + const channelStrip = rse.addElement('ChannelStrip'); + channelStrip.attributes.set('version', 'E56'); + + const channelStripParameters = rse.addElement('Parameters'); + channelStripParameters.innerText = `0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 ${track.playbackInfo.balance / 16} ${track.playbackInfo.volume / 16} 0.5 0.5 0.5`; + } + + private writeStavesNode(trackNode: XmlNode, track: Track) { + const staves = trackNode.addElement('Staves'); + for (const staff of track.staves) { + this.writeStaffNode(staves, staff); + } + } + + private writeStaffNode(parent: XmlNode, staff: Staff) { + const staffNode = parent.addElement('Staff'); + const properties = staffNode.addElement('Properties'); + + this.writeSimplePropertyNode(properties, 'CapoFret', 'Fret', staff.capo.toString()); + + const tuningProperty = this.writeSimplePropertyNode(properties, 'Tuning', 'Pitches', staff.tuning.slice().reverse().join(' ')); + tuningProperty.addElement('Flat'); + // TODO: right values + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + tuningProperty.addElement('Label').setCData(''); + tuningProperty.addElement('LabelVisible').innerText = 'true'; + + this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); + this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join()); + + this.writeDiagramCollection(properties, staff); + } + + private writeDiagramCollection(properties: XmlNode, staff: Staff) { + const diagramCollectionProperty = properties.addElement('Property'); + diagramCollectionProperty.attributes.set('name', 'DiagramCollection'); + const diagramCollectionItems = diagramCollectionProperty.addElement('Items'); + + staff.chords.forEach((chord, id) => { + + const diagramCollectionItem = diagramCollectionItems.addElement('Item'); + diagramCollectionItem.attributes.set('id', id); + diagramCollectionItem.attributes.set('name', chord.name); + + const diagram = diagramCollectionItem.addElement('Diagram'); + diagram.attributes.set('stringCount', chord.strings.length.toString()); + diagram.attributes.set('fretCount', '5'); + diagram.attributes.set('baseFret', (chord.firstFret - 1).toString()); + diagram.attributes.set('barStates', chord.strings.map(_ => '1').join(' ')); + + for (let i = 0; i < chord.strings.length; i++) { + const fret = diagram.addElement('Fret'); + fret.attributes.set('string', (chord.strings.length - 1 - i).toString()); + fret.attributes.set('fret', chord.strings[i].toString()); + } + + // TODO fingering + + const showName = diagram.addElement('Property'); + showName.attributes.set('name', 'ShowName'); + showName.attributes.set('type', 'bool'); + showName.attributes.set('value', chord.showName ? "true" : "false"); + + const showDiagram = diagram.addElement('Property'); + showDiagram.attributes.set('name', 'ShowDiagram'); + showDiagram.attributes.set('type', 'bool'); + showDiagram.attributes.set('value', chord.showDiagram ? "true" : "false"); + + const showFingering = diagram.addElement('Property'); + showFingering.attributes.set('name', 'ShowFingering'); + showFingering.attributes.set('type', 'bool'); + showFingering.attributes.set('value', chord.showFingering ? "true" : "false"); + + + // TOOD Chord details + }); + } + + private writeSimplePropertyNode(parent: XmlNode, propertyName: string, propertyValueTag: string, propertyValue: string | null) { + const prop = parent.addElement('Property'); + prop.attributes.set('name', propertyName); + if (propertyValue !== null) { + prop.addElement(propertyValueTag).innerText = propertyValue; + } + return prop; + } + + private writeLyricsNode(trackNode: XmlNode, track: Track) { + const lyrics = trackNode.addElement('Lyrics'); + lyrics.attributes.set('dispatched', 'true'); + + let lines: Lyrics[] = []; + + for (const bar of track.staves[0].bars) { + for (const voice of bar.voices) { + if (!voice.isEmpty) { + for (const beat of voice.beats) { + if (beat.lyrics) { + for (let l = 0; l < beat.lyrics.length; l++) { + if (l >= beat.lyrics.length) { + const newLyrics = new Lyrics(); + newLyrics.startBar = bar.index; + lines.push(newLyrics); + } + + const line = lines[l]; + if (line.text.length > 0) { + line.text += ' '; + } + + line.text += beat.lyrics[l]; + } + } + } + } + } + } + + for (let i = 0; i < lines.length; i++) { + const line = lyrics.addElement('Line'); + line.addElement('Text').setCData(lines[i].text); + line.addElement('Offset').innerText = lines[i].startBar.toString(); + } + } + + private writeSoundsNode(trackNode: XmlNode, track: Track) { + const sounds = trackNode.addElement('Sounds'); + const sound = sounds.addElement('Sound'); + + // TODO: right values + sound.addElement('Name').setCData(`Track_${track.index}_Initial`); + sound.addElement('Label').setCData(''); + sound.addElement('Path').setCData(''); + sound.addElement('Role').setCData(''); + + const midi = sound.addElement('MIDI'); + midi.addElement('LSB').innerText = '0'; + midi.addElement('MSB').innerText = '0'; + midi.addElement('Program').innerText = track.playbackInfo.program.toString(); + + // TODO: check if RSE is mandatory + + // TODO: generate sounds for all Program Changes. + // they need an item here with a name and then we refer to it on the automations + } + + private writeTransposeNode(trackNode: XmlNode, track: Track) { + const transpose = trackNode.addElement('Transpose'); + + const octaveTranspose = Math.floor(track.staves[0].displayTranspositionPitch / 12); + const chromaticTranspose = track.staves[0].displayTranspositionPitch - (octaveTranspose * 12); + + transpose.addElement('Chromatic').innerText = octaveTranspose.toString(); + transpose.addElement('Octave').innerText = chromaticTranspose.toString(); + } + + private writeInstrumentSetNode(trackNode: XmlNode, track: Track) { + const instrumentSet = trackNode.addElement('InstrumentSet'); + // TODO: create mapping of midi instruments to type + instrumentSet.addElement('Name').innerText = 'Steel Guitar'; + instrumentSet.addElement('Type').innerText = 'steelGuitar'; + + instrumentSet.addElement('LineCount').innerText = track.staves[0].standardNotationLineCount.toString(); + + // TODO: percussionArticulations + const elements = instrumentSet.addElement('Elements'); + const element = elements.addElement('Element'); + + element.addElement('Pitched').innerText = 'Pitched'; + element.addElement('Type').innerText = 'pitched'; + element.addElement('SoundbankName').innerText = ''; + + const articulations = element.addElement('Articulations'); + const articulation = articulations.addElement('Articulation'); + + articulation.addElement('Name').innerText = ''; + articulation.addElement('StaffLine').innerText = '0'; + articulation.addElement('Noteheads').innerText = 'noteheadBlack noteheadHalf noteheadWhole'; + articulation.addElement('TechniquePlacement').innerText = 'outside'; + articulation.addElement('TechniqueSymbol').innerText = ''; + articulation.addElement('InputMidiNumbers').innerText = ''; + articulation.addElement('OutputRSESound').innerText = ''; + articulation.addElement('OutputMidiNumber').innerText = '0'; + } + + private writeMasterBarsNode(parent: XmlNode, score: Score) { + const masterBars = parent.addElement('MasterBars'); + for (const masterBar of score.masterBars) { + this.writeMasterBarNode(masterBars, masterBar); + } + } + + private writeMasterBarNode(parent: XmlNode, masterBar: MasterBar) { + const masterBarNode = parent.addElement('MasterBar'); + + const key = masterBarNode.addElement('Key'); + key.addElement('AccidentalCount').innerText = (masterBar.keySignature as number).toString(); + key.addElement('Mode').innerText = KeySignatureType[masterBar.keySignatureType]; + key.addElement('Sharps').innerText = 'Sharps'; + + masterBarNode.addElement('Time').innerText = `${masterBar.timeSignatureNumerator}/${masterBar.timeSignatureDenominator}`; + + let bars: string[] = []; + for (const tracks of masterBar.score.tracks) { + for (const staves of tracks.staves) { + bars.push(staves.bars[masterBar.index].id.toString()); + } + } + + masterBarNode.addElement('Bars').innerText = bars.join(' '); + + if (masterBar.isDoubleBar) { + masterBarNode.addElement('DoubleBar'); + } + if (masterBar.isSectionStart) { + const section = masterBarNode.addElement('Section'); + section.addElement('Letter').innerText = masterBar.section!.marker; + section.addElement('Text').innerText = masterBar.section!.text; + } + + if (masterBar.isRepeatStart || masterBar.isRepeatEnd) { + const repeat = masterBarNode.addElement('Repeat'); + repeat.attributes.set('start', masterBar.isRepeatStart ? "true" : "false"); + repeat.attributes.set('end', masterBar.isRepeatEnd ? "true" : "false"); + if (masterBar.isRepeatEnd) { + repeat.attributes.set('count', masterBar.repeatCount.toString()); + } + } + + if (masterBar.alternateEndings > 0) { + let remainingBits = masterBar.alternateEndings; + + const alternateEndings: number[] = []; + let bit = 0; + while (remainingBits > 0) { + + if ((remainingBits >> bit)) { + alternateEndings.push(bit + 1); + // clear bit + remainingBits &= ~(1 << bit); + } + bit++; + } + + masterBarNode.addElement('AlternateEndings').innerText = alternateEndings.join(' ');; + } + + if (masterBar.tripletFeel !== TripletFeel.NoTripletFeel) { + masterBarNode.addElement('TripletFeel').innerText = TripletFeel[masterBar.tripletFeel]; + } + + this.writeFermatas(masterBarNode, masterBar); + } + + private writeFermatas(parent: XmlNode, masterBar: MasterBar) { + if (masterBar.fermata.size === 0) { + return; + } + + // TODO: Fermata + if (masterBar.fermata.size > 0) { + const fermatas = parent.addElement('Fermatas'); + masterBar.fermata.forEach((fermata, offset) => { + this.writeFermata(fermatas, offset, fermata); + }); + } + + } + private writeFermata(parent: XmlNode, offset: number, fermata: Fermata) { + + let numerator = 0; + let denominator = 1; + while (denominator < 10) { + // Offset = (numerator / denominator) * QuarterTime + // (Offset / QuarterTime) * denominator = numerator + + numerator = (offset / MidiUtils.QuarterTime) * denominator; + + // found a full digit match + if (numerator === Math.floor(numerator)) { + break; + } + + numerator = 0; + denominator++; + } + + if (numerator === 0) { + // No split found + return; + } + + const fermataNode = parent.addElement('Fermata'); + + fermataNode.addElement('Type').innerText = FermataType[fermata.type]; + fermataNode.addElement('Length').innerText = fermata.length.toString(); + fermataNode.addElement('Offset').innerText = `${numerator}/${denominator}`; + } + + private writeBarNode(parent: XmlNode, bar: Bar) { + const barNode = parent.addElement('Bar'); + barNode.attributes.set('id', bar.id.toString()); + + barNode.addElement('Voices').innerText = bar.voices.map(v => v.id).join(' '); + barNode.addElement('Clef').innerText = Clef[bar.clef]; + barNode.addElement('Ottavia').innerText = Clef[bar.clef].substr(1); + if (bar.simileMark !== SimileMark.None) { + barNode.addElement('SimileMark').innerText = SimileMark[bar.simileMark]; + } + } + + private writeVoiceNode(parent: XmlNode, voice: Voice) { + const voiceNode = parent.addElement('Voice'); + voiceNode.attributes.set('id', voice.id.toString()); + voiceNode.addElement('Beats').innerText = voice.beats.map(v => v.id).join(' '); } } diff --git a/src/importer/CapellaParser.ts b/src/importer/CapellaParser.ts index 20f7dc7c0..01e17872e 100644 --- a/src/importer/CapellaParser.ts +++ b/src/importer/CapellaParser.ts @@ -206,7 +206,7 @@ export class CapellaParser { } private parseDom(dom: XmlDocument): void { - let root: XmlNode | null = dom.documentElement; + let root: XmlNode | null = dom.firstElement; if (!root) { return; } diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 0c370f2f4..9f4e3aafc 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -49,7 +49,8 @@ import { NoteCloner } from '@src/generated/model/NoteCloner'; /** * This structure represents a duration within a gpif */ -class GpifRhythm { +export class GpifRhythm { + public id: string = ''; public dots: number = 0; public tupletDenominator: number = -1; public tupletNumerator: number = -1; @@ -134,7 +135,7 @@ export class GpifParser { } private parseDom(dom: XmlDocument): void { - let root: XmlNode | null = dom.documentElement; + let root: XmlNode | null = dom.firstElement; if (!root) { return; } @@ -717,7 +718,7 @@ export class GpifParser { break; case 'DiagramCollection': case 'ChordCollection': - this.parseDiagramCollection_Staff_XmlNode(staff, node); + this.parseDiagramCollectionForStaff(staff, node); break; case 'CapoFret': let capo: number = parseInt(node.findChildElement('Fret')!.innerText); @@ -757,49 +758,49 @@ export class GpifParser { return lyrics; } - private parseDiagramCollection_Track_XmlNode(track: Track, node: XmlNode): void { + private parseDiagramCollectionForTrack(track: Track, node: XmlNode): void { let items: XmlNode = node.findChildElement('Items')!; for (let c of items.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Item': - this.parseDiagramItem_Track_XmlNode(track, c); + this.parseDiagramItemForTrack(track, c); break; } } } } - private parseDiagramCollection_Staff_XmlNode(staff: Staff, node: XmlNode): void { + private parseDiagramCollectionForStaff(staff: Staff, node: XmlNode): void { let items: XmlNode = node.findChildElement('Items')!; for (let c of items.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Item': - this.parseDiagramItem_Staff_XmlNode(staff, c); + this.parseDiagramItemForStaff(staff, c); break; } } } } - private parseDiagramItem_Track_XmlNode(track: Track, node: XmlNode): void { + private parseDiagramItemForTrack(track: Track, node: XmlNode): void { let chord: Chord = new Chord(); let chordId: string = node.getAttribute('id'); for (let staff of track.staves) { staff.addChord(chordId, chord); } - this.parseDiagramItem_Chord_XmlNode(chord, node); + this.parseDiagramItemForChord(chord, node); } - private parseDiagramItem_Staff_XmlNode(staff: Staff, node: XmlNode): void { + private parseDiagramItemForStaff(staff: Staff, node: XmlNode): void { let chord: Chord = new Chord(); let chordId: string = node.getAttribute('id'); staff.addChord(chordId, chord); - this.parseDiagramItem_Chord_XmlNode(chord, node); + this.parseDiagramItemForChord(chord, node); } - private parseDiagramItem_Chord_XmlNode(chord: Chord, node: XmlNode): void { + private parseDiagramItemForChord(chord: Chord, node: XmlNode): void { chord.name = node.getAttribute('name'); let diagram: XmlNode = node.findChildElement('Diagram')!; let stringCount: number = parseInt(diagram.getAttribute('stringCount')); @@ -901,7 +902,7 @@ export class GpifParser { break; case 'DiagramCollection': case 'ChordCollection': - this.parseDiagramCollection_Track_XmlNode(track, node); + this.parseDiagramCollectionForTrack(track, node); break; case 'CapoFret': let capo: number = parseInt(node.findChildElement('Fret')!.innerText); @@ -2001,6 +2002,7 @@ export class GpifParser { private parseRhythm(node: XmlNode): void { let rhythm: GpifRhythm = new GpifRhythm(); let rhythmId: string = node.getAttribute('id'); + rhythm.id = rhythmId; for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { diff --git a/src/importer/MusicXmlImporter.ts b/src/importer/MusicXmlImporter.ts index bf30983ae..6518b537f 100644 --- a/src/importer/MusicXmlImporter.ts +++ b/src/importer/MusicXmlImporter.ts @@ -105,7 +105,7 @@ export class MusicXmlImporter extends ScoreImporter { } private parseDom(dom: XmlDocument): void { - let root: XmlNode | null = dom.documentElement; + let root: XmlNode | null = dom.firstElement; if (!root) { throw new UnsupportedFormatError('Unsupported format'); } diff --git a/src/model/Voice.ts b/src/model/Voice.ts index 5f03671a0..4afbec081 100644 --- a/src/model/Voice.ts +++ b/src/model/Voice.ts @@ -13,6 +13,13 @@ import { Settings } from '@src/Settings'; export class Voice { private _beatLookup!: Map; + private static _globalBarId: number = 0; + + /** + * Gets or sets the unique id of this bar. + */ + public id: number = Voice._globalBarId++; + /** * Gets or sets the zero-based index of this voice within the bar. * @json_ignore diff --git a/src/xml/XmlDocument.ts b/src/xml/XmlDocument.ts index 19f31776b..bc7f4834f 100644 --- a/src/xml/XmlDocument.ts +++ b/src/xml/XmlDocument.ts @@ -26,8 +26,6 @@ import { XmlParser } from '@src/xml/XmlParser'; import { XmlWriter } from './XmlWriter'; export class XmlDocument extends XmlNode { - public documentElement: XmlNode | null = null; - public constructor() { super(); this.nodeType = XmlNodeType.Document; @@ -35,12 +33,6 @@ export class XmlDocument extends XmlNode { public parse(xml: string) { XmlParser.parse(xml, 0, this); - for (let child of this.childNodes) { - if (child.nodeType === XmlNodeType.Element) { - this.documentElement = child; - break; - } - } } public toString(indention: string = '', xmlHeader:boolean = false): string { diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index 94aedf326..c1da7b9f5 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -80,6 +80,14 @@ export class XmlNode { return null; } + public addElement(name: string): XmlNode { + const newNode = new XmlNode(); + newNode.nodeType = XmlNodeType.Element; + newNode.localName = name; + this.addChild(newNode); + return newNode; + } + public get innerText(): string { if (this.nodeType === XmlNodeType.Element || this.nodeType === XmlNodeType.Document) { let txt: string = ''; @@ -91,4 +99,19 @@ export class XmlNode { } return this.value ?? ''; } + + + public set innerText(s: string) { + const textNode = new XmlNode(); + textNode.nodeType = XmlNodeType.Text; + textNode.value = s; + this.childNodes = [textNode]; + } + + public setCData(s:string) { + const textNode = new XmlNode(); + textNode.nodeType = XmlNodeType.CDATA; + textNode.value = s; + this.childNodes = [textNode]; + } } diff --git a/test/xml/XmlParse.test.ts b/test/xml/XmlParse.test.ts index 5b9a17697..cd3da981a 100644 --- a/test/xml/XmlParse.test.ts +++ b/test/xml/XmlParse.test.ts @@ -7,118 +7,118 @@ describe('XmlParseTest', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.childNodes.length).toEqual(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.childNodes.length).toEqual(0); }); it('parseShorthand', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.childNodes.length).toEqual(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.childNodes.length).toEqual(0); }); it('parseSingleAttribute', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.getAttribute('att')).toEqual('v'); - expect(xml.documentElement!.childNodes.length).toEqual(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.getAttribute('att')).toEqual('v'); + expect(xml.firstElement!.childNodes.length).toEqual(0); }); it('parseMultipleAttributes', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.getAttribute('att')).toEqual('v'); - expect(xml.documentElement!.getAttribute('att2')).toEqual('v2'); - expect(xml.documentElement!.childNodes.length).toEqual(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.getAttribute('att')).toEqual('v'); + expect(xml.firstElement!.getAttribute('att2')).toEqual('v2'); + expect(xml.firstElement!.childNodes.length).toEqual(0); }); it('parseSimpleText', () => { let s: string = 'Text'; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.childNodes.length).toEqual(1); - expect(xml.documentElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Text); - expect(xml.documentElement!.childNodes[0].value).toEqual('Text'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.childNodes.length).toEqual(1); + expect(xml.firstElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Text); + expect(xml.firstElement!.childNodes[0].value).toEqual('Text'); }); it('parseChild', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.childNodes.length).toEqual(1); - expect(xml.documentElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[0].localName).toEqual('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.childNodes.length).toEqual(1); + expect(xml.firstElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toEqual('cc'); }); it('parseMultiChild', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); - expect(xml.documentElement!.childNodes.length).toEqual(2); - expect(xml.documentElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[0].localName).toEqual('cc'); - expect(xml.documentElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[1].localName).toEqual('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); + expect(xml.firstElement!.childNodes.length).toEqual(2); + expect(xml.firstElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toEqual('cc'); + expect(xml.firstElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toEqual('cc'); }); it('parseComments', () => { let s: string = 'value'; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('test'); - expect(xml.documentElement!.childNodes.length).toEqual(2); - expect(xml.documentElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[0].localName).toEqual('cc'); - expect(xml.documentElement!.childNodes[0].getAttribute('c')).toEqual('d'); - expect(xml.documentElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[1].localName).toEqual('cc'); - expect(xml.documentElement!.childNodes[1].childNodes.length).toEqual(1); - expect(xml.documentElement!.childNodes[1].childNodes[0].nodeType).toEqual(XmlNodeType.Text); - expect(xml.documentElement!.childNodes[1].childNodes[0].value).toEqual('value'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('test'); + expect(xml.firstElement!.childNodes.length).toEqual(2); + expect(xml.firstElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toEqual('cc'); + expect(xml.firstElement!.childNodes[0].getAttribute('c')).toEqual('d'); + expect(xml.firstElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toEqual('cc'); + expect(xml.firstElement!.childNodes[1].childNodes.length).toEqual(1); + expect(xml.firstElement!.childNodes[1].childNodes[0].nodeType).toEqual(XmlNodeType.Text); + expect(xml.firstElement!.childNodes[1].childNodes[0].value).toEqual('value'); }); it('parseDoctype', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('test'); - expect(xml.documentElement!.childNodes.length).toEqual(2); - expect(xml.documentElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[0].localName).toEqual('cc'); - expect(xml.documentElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); - expect(xml.documentElement!.childNodes[1].localName).toEqual('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('test'); + expect(xml.firstElement!.childNodes.length).toEqual(2); + expect(xml.firstElement!.childNodes[0].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toEqual('cc'); + expect(xml.firstElement!.childNodes[1].nodeType).toEqual(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toEqual('cc'); }); it('parseXmlHeadTest', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); - expect(xml.documentElement!.localName).toEqual('root'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toEqual('root'); }); it('parseFull', async () => { const s = await TestPlatform.loadFileAsString('test-data/xml/GPIF.xml'); let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.documentElement).toBeTruthy(); + expect(xml.firstElement).toBeTruthy(); }); }); diff --git a/test/xml/XmllWrite.test.ts b/test/xml/XmllWrite.test.ts index 825d5815d..896f61ea0 100644 --- a/test/xml/XmllWrite.test.ts +++ b/test/xml/XmllWrite.test.ts @@ -74,11 +74,11 @@ describe('XmlWriteTest', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - xml.documentElement!.attributes.set("lt", "<"); - xml.documentElement!.attributes.set("gt", ">"); - xml.documentElement!.attributes.set("amp", "&"); - xml.documentElement!.attributes.set("apos", "'"); - xml.documentElement!.attributes.set("quot", "\""); + xml.firstElement!.attributes.set("lt", "<"); + xml.firstElement!.attributes.set("gt", ">"); + xml.firstElement!.attributes.set("amp", "&"); + xml.firstElement!.attributes.set("apos", "'"); + xml.firstElement!.attributes.set("quot", "\""); expect(xml.toString()).toEqual(''); }); From df41504f5b8db0235a845bf0f7b1dcbceeb61e40 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 9 Dec 2020 17:29:00 +0100 Subject: [PATCH 07/31] WIP --- src/exporter/Gp7Exporter.ts | 8 +- src/exporter/GpifWriter.ts | 244 ++++++++++++++++++++++++++++++++++-- src/model/Tuning.ts | 11 +- src/xml/XmlWriter.ts | 3 +- 4 files changed, 247 insertions(+), 19 deletions(-) diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts index c89463086..04aba2860 100644 --- a/src/exporter/Gp7Exporter.ts +++ b/src/exporter/Gp7Exporter.ts @@ -4,7 +4,7 @@ import { ZipEntry } from '@src/zip/ZipEntry'; import { ScoreExporter } from './ScoreExporter'; import { IOHelper } from '@src/io/IOHelper'; import { BinaryStylesheet } from '@src/importer/BinaryStylesheet'; -import { PartConfiguration } from '@src/importer/PartConfiguration'; +// import { PartConfiguration } from '@src/importer/PartConfiguration'; import { GpifWriter } from './GpifWriter'; import { ZipWriter } from '@src/zip/ZipWriter'; /** @@ -22,9 +22,9 @@ export class Gp7Exporter extends ScoreExporter { public writeScore(score: Score): void { Logger.debug(this.name, 'Writing data entries'); const gpifWriter: GpifWriter = new GpifWriter(); - const gpifXml = gpifWriter.writeXml(score, this.settings); + const gpifXml = gpifWriter.writeXml(score); const binaryStylesheet = BinaryStylesheet.writeForScore(score); - const partConfiguration = PartConfiguration.writeForScore(score); + //const partConfiguration = PartConfiguration.writeForScore(score); Logger.debug(this.name, 'Writing ZIP entries'); let fileSystem: ZipWriter = new ZipWriter(this.data); @@ -32,7 +32,7 @@ export class Gp7Exporter extends ScoreExporter { fileSystem.writeEntry(new ZipEntry('Content/', new Uint8Array(0))); fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); - fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); + //fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); fileSystem.end(); } } diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index e867df53f..b4568e4de 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1,4 +1,5 @@ import { MidiUtils } from '@src/midi/MidiUtils'; +import { AccentuationType } from '@src/model/AccentuationType'; import { Bar } from '@src/model/Bar'; import { Beat } from '@src/model/Beat'; import { BrushType } from '@src/model/BrushType'; @@ -7,7 +8,9 @@ import { CrescendoType } from '@src/model/CrescendoType'; import { Duration } from '@src/model/Duration'; import { DynamicValue } from '@src/model/DynamicValue'; import { Fermata, FermataType } from '@src/model/Fermata'; +import { Fingers } from '@src/model/Fingers'; import { GraceType } from '@src/model/GraceType'; +import { HarmonicType } from '@src/model/HarmonicType'; import { KeySignatureType } from '@src/model/KeySignatureType'; import { Lyrics } from '@src/model/Lyrics'; import { MasterBar } from '@src/model/MasterBar'; @@ -15,9 +18,12 @@ import { Note } from '@src/model/Note'; import { Ottavia } from '@src/model/Ottavia'; import { Score } from '@src/model/Score'; import { SimileMark } from '@src/model/SimileMark'; +import { SlideInType } from '@src/model/SlideInType'; +import { SlideOutType } from '@src/model/SlideOutType'; import { Staff } from '@src/model/Staff'; import { Track } from '@src/model/Track'; import { TripletFeel } from '@src/model/TripletFeel'; +import { VibratoType } from '@src/model/VibratoType'; import { Voice } from '@src/model/Voice'; import { BeamDirection } from '@src/rendering/utils/BeamDirection'; import { XmlDocument } from '@src/xml/XmlDocument'; @@ -58,7 +64,7 @@ export class GpifWriter { this.writeMasterBarsNode(gpif, score); const bars = gpif.addElement('Bars'); - const voices = gpif.addElement('Voice'); + const voices = gpif.addElement('Voices'); const beats = gpif.addElement('Beats'); const notes = gpif.addElement('Notes'); const rhythms = gpif.addElement('Rhythms'); @@ -90,6 +96,219 @@ export class GpifWriter { private writeNoteNode(parent: XmlNode, note: Note) { const noteNode = parent.addElement('Note'); noteNode.attributes.set('id', note.id.toString()); + + this.writeNoteProperties(noteNode, note); + + if (note.isGhost) { + noteNode.addElement('AntiAccent').innerText = 'normal'; + } + + if (note.isLetRing) { + noteNode.addElement('LetRing'); + } + + if (note.isTrill) { + noteNode.addElement('Trill').innerText = note.trillValue!.toString(); + } + + let accentFlags = 0; + if (note.isStaccato) { + accentFlags |= 1; + } + switch (note.accentuated) { + case AccentuationType.Normal: + accentFlags |= 0x04; + break; + case AccentuationType.Heavy: + accentFlags |= 0x08; + break; + } + + if (accentFlags > 0) { + noteNode.addElement('Accent').innerText = accentFlags.toString(); + } + + if (note.isTieOrigin || note.isTieDestination) { + const tie = noteNode.addElement('Tie'); + tie.attributes.set('origin', note.isTieOrigin ? 'true' : 'false'); + tie.attributes.set('destination', note.isTieOrigin ? 'true' : 'false'); + } + + switch (note.vibrato) { + case VibratoType.Slight: + noteNode.addElement('Vibrato').innerText = 'Slight'; + break; + case VibratoType.Wide: + noteNode.addElement('Vibrato').innerText = 'Wide'; + break; + } + + if (note.isFingering) { + switch (note.leftHandFinger) { + case Fingers.Thumb: + noteNode.addElement('LeftFingering').innerText = 'P'; + break; + case Fingers.IndexFinger: + noteNode.addElement('LeftFingering').innerText = 'I'; + break; + case Fingers.MiddleFinger: + noteNode.addElement('LeftFingering').innerText = 'M'; + break; + case Fingers.AnnularFinger: + noteNode.addElement('LeftFingering').innerText = 'A'; + break; + case Fingers.LittleFinger: + noteNode.addElement('LeftFingering').innerText = 'C'; + break; + } + switch (note.rightHandFinger) { + case Fingers.Thumb: + noteNode.addElement('RightFingering').innerText = 'P'; + break; + case Fingers.IndexFinger: + noteNode.addElement('RightFingering').innerText = 'I'; + break; + case Fingers.MiddleFinger: + noteNode.addElement('RightFingering').innerText = 'M'; + break; + case Fingers.AnnularFinger: + noteNode.addElement('RightFingering').innerText = 'A'; + break; + case Fingers.LittleFinger: + noteNode.addElement('RightFingering').innerText = 'C'; + break; + } + } + + if (note.percussionArticulation >= 0) { + noteNode.addElement('InstrumentArticulation').innerText = note.percussionArticulation.toString(); + } else { + noteNode.addElement('InstrumentArticulation').innerText = '0'; + + } + } + + private writeNoteProperties(parent: XmlNode, note: Note) { + const properties = parent.addElement('Properties'); + + this.writeConcertPitch(properties, note); + this.writeTransposedPitch(properties, note); + + + if (note.isStringed) { + this.writeSimplePropertyNode(properties, 'String', 'String', (note.string - 1).toString()); + this.writeSimplePropertyNode(properties, 'Fret', 'Fret', note.fret.toString()); + } + + if (note.isPiano) { + this.writeSimplePropertyNode(properties, 'Octave', 'Number', note.octave.toString()); + this.writeSimplePropertyNode(properties, 'Tone', 'Step', note.tone.toString()); + } + + if (note.beat.tap) { + this.writeSimplePropertyNode(properties, 'Tapped', 'Enable', null); + } + + if (note.harmonicType !== HarmonicType.None) { + switch (note.harmonicType) { + case HarmonicType.Natural: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Natural'); + break; + case HarmonicType.Artificial: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Artificial'); + break; + case HarmonicType.Pinch: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Pinch'); + break; + case HarmonicType.Tap: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Tap'); + break; + case HarmonicType.Semi: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Semi'); + break; + case HarmonicType.Feedback: + this.writeSimplePropertyNode(properties, 'HarmonicType', 'HType', 'Feedback'); + break; + } + + if (note.harmonicValue !== 0) { + this.writeSimplePropertyNode(properties, 'HarmonicFret', 'HFret', note.harmonicValue.toString()) + } + } + + + if (note.isDead) { + this.writeSimplePropertyNode(properties, 'Muted', 'Enable', null); + } + + if (note.isPalmMute) { + this.writeSimplePropertyNode(properties, 'PalmMuted', 'Enable', null); + } + + if (note.hasBend) { + this.writeBend(properties, note); + } + + if (note.isHammerPullOrigin) { + this.writeSimplePropertyNode(properties, 'HopoOrigin', 'Enable', null); + } + + if (note.isHammerPullDestination) { + this.writeSimplePropertyNode(properties, 'HopoDestination', 'Enable', null); + } + + if (note.isLeftHandTapped) { + this.writeSimplePropertyNode(properties, 'LeftHandTapped', 'Enable', null); + } + + + let slideFlags = 0; + switch (note.slideInType) { + case SlideInType.IntoFromAbove: + slideFlags |= 16; + break; + case SlideInType.IntoFromBelow: + slideFlags |= 32; + break; + } + switch (note.slideOutType) { + case SlideOutType.Shift: + slideFlags |= 1; + break; + case SlideOutType.Legato: + slideFlags |= 2; + break; + case SlideOutType.OutDown: + slideFlags |= 4; + break; + case SlideOutType.OutUp: + slideFlags |= 8; + break; + case SlideOutType.PickSlideDown: + slideFlags |= 64; + break; + case SlideOutType.PickSlideUp: + slideFlags |= 128; + break; + } + + if (slideFlags > 0) { + this.writeSimplePropertyNode(properties, 'Slide', 'Flags', slideFlags.toString()); + } + } + + private writeTransposedPitch(properties: XmlNode, note: Note) { + } + + private writeConcertPitch(properties: XmlNode, note: Note) { + // TODO: handle accidentals + // let parts = Tuning.getTextPartsForTuning(note.realValue); + // this.writePitch(properties, parts[0]) + // throw new Error('Method not implemented.'); + } + + private writeBend(properties: XmlNode, note: Note) { + // TODO: write bend } private writeBeatNode(parent: XmlNode, beat: Beat, rhythms: XmlNode) { @@ -163,7 +382,9 @@ export class GpifWriter { } beatNode.addElement('ConcertPitchStemOrientation').innerText = 'Undefined'; - beatNode.addElement('Notes').innerText = beat.notes.map(n => n.id).join(' '); + if(!beat.isRest) { + beatNode.addElement('Notes').innerText = beat.notes.map(n => n.id).join(' '); + } beatNode.addElement('Properties'); } @@ -258,8 +479,8 @@ export class GpifWriter { scoreNode.addElement('PageFooter').setCData(''); // TODO: find out right avlues - scoreNode.addElement('ScoreSystemsDefaultLayout').setCData('2'); - scoreNode.addElement('ScoreSystemsLayout').setCData('2 2 2 2 2 2 2'); + scoreNode.addElement('ScoreSystemsDefaultLayout').setCData('4'); + scoreNode.addElement('ScoreSystemsLayout').setCData('4'); scoreNode.addElement('ScoreZoomPolicy').setCData('Value'); scoreNode.addElement('ScoreZoom').setCData('1'); @@ -278,8 +499,16 @@ export class GpifWriter { masterTrackNode.addElement('Anacrusis'); } + const initialTempoAutomation = automations.addElement('Automation'); + initialTempoAutomation.addElement('Type').innerText = 'Tempo'; + initialTempoAutomation.addElement('Linear').innerText = 'true'; + initialTempoAutomation.addElement('Bar').innerText = "0"; + initialTempoAutomation.addElement('Position').innerText = "0"; + initialTempoAutomation.addElement('Visible').innerText = 'true'; + initialTempoAutomation.addElement('Value').innerText = `${score.tempo} 2`; + for (const mb of score.masterBars) { - if (mb.tempoAutomation) { + if (mb.index > 0 && mb.tempoAutomation) { const tempoAutomation = automations.addElement('Automation'); tempoAutomation.addElement('Type').innerText = 'Tempo'; tempoAutomation.addElement('Linear').innerText = 'true'; @@ -313,8 +542,7 @@ export class GpifWriter { // TODO right value trackNode.addElement('SystemsDefautLayout').innerText = "3"; - trackNode.addElement('SystemsLayout').innerText = "2 2 3 2 2 2 1"; - trackNode.addElement('SystemsLayout').innerText = "2 2 3 2 2 2 1"; + trackNode.addElement('SystemsLayout').innerText = "2"; trackNode.addElement('AutoBrush'); trackNode.addElement('PalmMute').innerText = '0'; @@ -399,7 +627,7 @@ export class GpifWriter { tuningProperty.addElement('LabelVisible').innerText = 'true'; this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); - this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join()); + this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join('')); this.writeDiagramCollection(properties, staff); } diff --git a/src/model/Tuning.ts b/src/model/Tuning.ts index d8f56f8b5..1399c1f14 100644 --- a/src/model/Tuning.ts +++ b/src/model/Tuning.ts @@ -9,14 +9,15 @@ export class Tuning { private static _defaultTunings: Map = new Map(); public static getTextForTuning(tuning: number, includeOctave: boolean): string { + let parts = Tuning.getTextPartsForTuning(tuning); + return includeOctave ? parts.join('') : parts[0]; + } + + public static getTextPartsForTuning(tuning: number): string[] { let octave: number = (tuning / 12) | 0; let note: number = tuning % 12; let notes: string[] = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']; - let result: string = notes[note]; - if (includeOctave) { - result += octave - 1; - } - return result; + return [notes[note], (octave - 1).toString()]; } /** diff --git a/src/xml/XmlWriter.ts b/src/xml/XmlWriter.ts index 9eefbff55..588541d13 100644 --- a/src/xml/XmlWriter.ts +++ b/src/xml/XmlWriter.ts @@ -1,4 +1,3 @@ -import { XmlDocument } from './XmlDocument'; import { XmlNode, XmlNodeType } from './XmlNode'; export class XmlWriter { @@ -66,7 +65,7 @@ export class XmlWriter { break; case XmlNodeType.CDATA: if (xml.value) { - this.write(``); } break; case XmlNodeType.Document: From 5cd2dc0b3729b0899af7ad8e0e0331782913d50e Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 17:08:18 +0100 Subject: [PATCH 08/31] Working with missing features --- playground-template/control.js | 11 ++ src/exporter/GpifWriter.ts | 282 +++++++++++++++++++++++++++--- src/importer/GpifParser.ts | 4 +- src/model/Tuning.ts | 4 +- src/xml/XmlNode.ts | 2 +- src/xml/XmlWriter.ts | 2 +- test/exporter/Gp7Exporter.test.ts | 226 ++++++++++++++++++++++++ test/index.ts | 3 +- 8 files changed, 501 insertions(+), 33 deletions(-) create mode 100644 test/exporter/Gp7Exporter.test.ts diff --git a/playground-template/control.js b/playground-template/control.js index 23b7cbe95..73253bea0 100644 --- a/playground-template/control.js +++ b/playground-template/control.js @@ -235,6 +235,17 @@ function setupControl(selector) { at.print(); }; + control.querySelector('.at-download').onclick = function (e) { + const exporter = new alphaTab.exporter.Gp7Exporter(); + const data = exporter.export(at.score, at.settings); + const a = document.createElement('a'); + a.download = at.score.title + '.gp'; + a.href = URL.createObjectURL(new Blob([data])); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + }; + control.querySelectorAll('.at-zoom-options a').forEach(function (a) { a.onclick = function (e) { e.preventDefault(); diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index b4568e4de..4661cdc0d 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -2,6 +2,7 @@ import { MidiUtils } from '@src/midi/MidiUtils'; import { AccentuationType } from '@src/model/AccentuationType'; import { Bar } from '@src/model/Bar'; import { Beat } from '@src/model/Beat'; +import { BendPoint } from '@src/model/BendPoint'; import { BrushType } from '@src/model/BrushType'; import { Clef } from '@src/model/Clef'; import { CrescendoType } from '@src/model/CrescendoType'; @@ -15,7 +16,9 @@ import { KeySignatureType } from '@src/model/KeySignatureType'; import { Lyrics } from '@src/model/Lyrics'; import { MasterBar } from '@src/model/MasterBar'; import { Note } from '@src/model/Note'; +import { NoteAccidentalMode } from '@src/model/NoteAccidentalMode'; import { Ottavia } from '@src/model/Ottavia'; +import { PickStroke } from '@src/model/PickStroke'; import { Score } from '@src/model/Score'; import { SimileMark } from '@src/model/SimileMark'; import { SlideInType } from '@src/model/SlideInType'; @@ -23,6 +26,7 @@ import { SlideOutType } from '@src/model/SlideOutType'; import { Staff } from '@src/model/Staff'; import { Track } from '@src/model/Track'; import { TripletFeel } from '@src/model/TripletFeel'; +import { Tuning } from '@src/model/Tuning'; import { VibratoType } from '@src/model/VibratoType'; import { Voice } from '@src/model/Voice'; import { BeamDirection } from '@src/rendering/utils/BeamDirection'; @@ -117,10 +121,10 @@ export class GpifWriter { } switch (note.accentuated) { case AccentuationType.Normal: - accentFlags |= 0x04; + accentFlags |= 0x08; break; case AccentuationType.Heavy: - accentFlags |= 0x08; + accentFlags |= 0x04; break; } @@ -131,7 +135,7 @@ export class GpifWriter { if (note.isTieOrigin || note.isTieDestination) { const tie = noteNode.addElement('Tie'); tie.attributes.set('origin', note.isTieOrigin ? 'true' : 'false'); - tie.attributes.set('destination', note.isTieOrigin ? 'true' : 'false'); + tie.attributes.set('destination', note.isTieDestination ? 'true' : 'false'); } switch (note.vibrato) { @@ -265,10 +269,10 @@ export class GpifWriter { let slideFlags = 0; switch (note.slideInType) { case SlideInType.IntoFromAbove: - slideFlags |= 16; + slideFlags |= 32; break; case SlideInType.IntoFromBelow: - slideFlags |= 32; + slideFlags |= 16; break; } switch (note.slideOutType) { @@ -298,19 +302,131 @@ export class GpifWriter { } private writeTransposedPitch(properties: XmlNode, note: Note) { + let parts = Tuning.getTextPartsForTuning(note.displayValueWithoutBend, 0); + this.writePitch(properties, "TransposedPitch", parts[0], parts[1], note.accidentalMode) } private writeConcertPitch(properties: XmlNode, note: Note) { - // TODO: handle accidentals - // let parts = Tuning.getTextPartsForTuning(note.realValue); - // this.writePitch(properties, parts[0]) - // throw new Error('Method not implemented.'); + let parts = Tuning.getTextPartsForTuning(note.realValue, 0); + this.writePitch(properties, "ConcertPitch", parts[0], parts[1], note.accidentalMode) + } + + private writePitch(properties: XmlNode, propertyName: string, step: string, octave: string, accidental: NoteAccidentalMode) { + const property = properties.addElement('Property'); + property.attributes.set('name', propertyName); + + const pitch = property.addElement('Pitch'); + const stepElement = pitch.addElement('Step'); + const accidentalElement = pitch.addElement('Accidental'); + // TODO: respect accidentalmode + switch (step) { + case 'C': + stepElement.innerText = 'C'; + accidentalElement.innerText = ''; + break; + case 'Db': + stepElement.innerText = 'C'; + accidentalElement.innerText = '#'; + break; + case 'D': + stepElement.innerText = 'D'; + accidentalElement.innerText = ''; + break; + case 'Eb': + stepElement.innerText = 'D'; + accidentalElement.innerText = '#'; + break; + case 'E': + stepElement.innerText = 'E'; + accidentalElement.innerText = ''; + break; + case 'F': + stepElement.innerText = 'F'; + accidentalElement.innerText = ''; + break; + case 'Gb': + stepElement.innerText = 'F'; + accidentalElement.innerText = '#'; + break; + case 'G': + stepElement.innerText = 'G'; + accidentalElement.innerText = ''; + break; + case 'Ab': + stepElement.innerText = 'G'; + accidentalElement.innerText = '#'; + break; + case 'A': + stepElement.innerText = 'A'; + accidentalElement.innerText = ''; + break; + case 'Bb': + stepElement.innerText = 'A'; + accidentalElement.innerText = '#'; + break; + case 'B': + stepElement.innerText = 'B'; + accidentalElement.innerText = ''; + break; + } + pitch.addElement('Octave').innerText = octave; } private writeBend(properties: XmlNode, note: Note) { - // TODO: write bend + if (note.hasBend && note.bendPoints.length <= 4) { + this.writeStandardBend(properties, note.bendPoints); + } + } + + private writeStandardBend(properties: XmlNode, bendPoints: BendPoint[]) { + this.writeSimplePropertyNode(properties, 'Bended', 'Enable', null); + + var bendOrigin = bendPoints[0]; + var bendDestination = bendPoints[bendPoints.length - 1]; + var bendMiddle1: BendPoint; + var bendMiddle2: BendPoint; + + switch (bendPoints.length) { + case 4: + bendMiddle1 = bendPoints[1]; + bendMiddle2 = bendPoints[2]; + break; + case 3: + bendMiddle1 = bendPoints[1]; + bendMiddle2 = bendPoints[1]; + break; + case 2: + default: + bendMiddle1 = new BendPoint( + (bendOrigin.offset + bendDestination.offset) / 2, + (bendOrigin.value + bendDestination.value) / 2 + ); + bendMiddle2 = bendMiddle1; + break; + } + + this.writeSimplePropertyNode(properties, 'BendDestinationOffset', 'Float', this.toBendOffset(bendDestination.offset).toString()); + this.writeSimplePropertyNode(properties, 'BendDestinationValue', 'Float', this.toBendValue(bendDestination.value).toString()); + + this.writeSimplePropertyNode(properties, 'BendMiddleOffset1', 'Float', this.toBendOffset(bendMiddle1.offset).toString()); + this.writeSimplePropertyNode(properties, 'BendMiddleOffset2', 'Float', this.toBendOffset(bendMiddle2.offset).toString()); + this.writeSimplePropertyNode(properties, 'BendMiddleValue', 'Float', this.toBendValue(bendMiddle1.value).toString()); + + this.writeSimplePropertyNode(properties, 'BendOriginOffset', 'Float', this.toBendOffset(bendOrigin.offset).toString()); + this.writeSimplePropertyNode(properties, 'BendOriginValue', 'Float', this.toBendValue(bendOrigin.value).toString()); + } + + private toBendValue(value: number) { + // GPIF: 25 per quarternote + return value * 25; } + private toBendOffset(value: number) { + // GPIF range: 0-100 + return (value / BendPoint.MaxPosition) * 100.0; + } + + private writeBeatNode(parent: XmlNode, beat: Beat, rhythms: XmlNode) { const beatNode = parent.addElement('Beat'); beatNode.attributes.set('id', beat.id.toString()); @@ -382,11 +498,58 @@ export class GpifWriter { } beatNode.addElement('ConcertPitchStemOrientation').innerText = 'Undefined'; - if(!beat.isRest) { + if (!beat.isRest) { beatNode.addElement('Notes').innerText = beat.notes.map(n => n.id).join(' '); } - beatNode.addElement('Properties'); + this.writeBeatProperties(beatNode, beat); + this.writeBeatXProperties(beatNode, beat); + } + private writeBeatXProperties(beatNode: XmlNode, beat: Beat) { + const beatProperties = beatNode.addElement('XProperties'); + + if(beat.brushDuration > 0) { + this.writeSimpleXPropertyNode(beatProperties, '687935489', 'Int', beat.brushDuration.toString()); + } + } + + private writeBeatProperties(beatNode: XmlNode, beat: Beat) { + const beatProperties = beatNode.addElement('Properties'); + + switch (beat.brushType) { + case BrushType.BrushUp: + this.writeSimplePropertyNode(beatProperties, 'Brush', 'Direction', 'Up'); + break; + case BrushType.BrushDown: + this.writeSimplePropertyNode(beatProperties, 'Brush', 'Direction', 'Down'); + break; + } + + switch (beat.pickStroke) { + case PickStroke.Up: + this.writeSimplePropertyNode(beatProperties, 'PickStroke', 'Direction', 'Up'); + break; + case PickStroke.Down: + this.writeSimplePropertyNode(beatProperties, 'PickStroke', 'Direction', 'Down'); + break; + } + + if (beat.slap) { + this.writeSimplePropertyNode(beatProperties, 'Slapped', 'Enable', null); + } + + if (beat.pop) { + this.writeSimplePropertyNode(beatProperties, 'Popped', 'Enable', null); + } + + switch (beat.vibrato) { + case VibratoType.Wide: + this.writeSimplePropertyNode(beatProperties, 'VibratoWTremBar', 'Strength', 'Wide'); + break; + case VibratoType.Slight: + this.writeSimplePropertyNode(beatProperties, 'VibratoWTremBar', 'Strength', 'Slight'); + break; + } } private writeRhythm(parent: XmlNode, beat: Beat, rhythms: XmlNode) { @@ -455,8 +618,48 @@ export class GpifWriter { parent.addElement('Rhythm').attributes.set('ref', rhythm); } - private writeWhammyNode(_parent: XmlNode, _beat: Beat) { - // TODO: whammy + private writeWhammyNode(parent: XmlNode, beat: Beat) { + if (beat.hasWhammyBar && beat.whammyBarPoints.length <= 4) { + this.writeStandardWhammy(parent, beat.whammyBarPoints); + } + } + + private writeStandardWhammy(parent: XmlNode, whammyBarPoints: BendPoint[]) { + + const whammyNode = parent.addElement('Whammy'); + var whammyOrigin = whammyBarPoints[0]; + var whammyDestination = whammyBarPoints[whammyBarPoints.length - 1]; + var whammyMiddle1: BendPoint; + var whammyMiddle2: BendPoint; + + switch (whammyBarPoints.length) { + case 4: + whammyMiddle1 = whammyBarPoints[1]; + whammyMiddle2 = whammyBarPoints[2]; + break; + case 3: + whammyMiddle1 = whammyBarPoints[1]; + whammyMiddle2 = whammyBarPoints[1]; + break; + case 2: + default: + whammyMiddle1 = new BendPoint( + (whammyOrigin.offset + whammyDestination.offset) / 2, + (whammyOrigin.value + whammyDestination.value) / 2 + ); + whammyMiddle2 = whammyMiddle1; + break; + } + + whammyNode.attributes.set('destinationOffset', this.toBendOffset(whammyDestination.offset).toString()); + whammyNode.attributes.set('destinationValue', this.toBendValue(whammyDestination.value).toString()); + + whammyNode.attributes.set('middleOffset1', this.toBendOffset(whammyMiddle1.offset).toString()); + whammyNode.attributes.set('middleOffset2', this.toBendOffset(whammyMiddle2.offset).toString()); + whammyNode.attributes.set('middleValue', this.toBendValue(whammyMiddle1.value).toString()); + + whammyNode.attributes.set('originOffset', this.toBendOffset(whammyOrigin.offset).toString()); + whammyNode.attributes.set('originValue', this.toBendValue(whammyOrigin.value).toString()); } private writeScoreNode(parent: XmlNode, score: Score) { @@ -482,10 +685,10 @@ export class GpifWriter { scoreNode.addElement('ScoreSystemsDefaultLayout').setCData('4'); scoreNode.addElement('ScoreSystemsLayout').setCData('4'); - scoreNode.addElement('ScoreZoomPolicy').setCData('Value'); - scoreNode.addElement('ScoreZoom').setCData('1'); + scoreNode.addElement('ScoreZoomPolicy').innerText = 'Value'; + scoreNode.addElement('ScoreZoom').innerText = '1'; // not fully clear at this point so we rather activate it - scoreNode.addElement('MultiVoice').setCData('1>'); + scoreNode.addElement('MultiVoice').innerText = '1>'; } private writeMasterTrackNode(parent: XmlNode, score: Score) { @@ -501,21 +704,27 @@ export class GpifWriter { const initialTempoAutomation = automations.addElement('Automation'); initialTempoAutomation.addElement('Type').innerText = 'Tempo'; - initialTempoAutomation.addElement('Linear').innerText = 'true'; + initialTempoAutomation.addElement('Linear').innerText = 'false'; initialTempoAutomation.addElement('Bar').innerText = "0"; initialTempoAutomation.addElement('Position').innerText = "0"; initialTempoAutomation.addElement('Visible').innerText = 'true'; initialTempoAutomation.addElement('Value').innerText = `${score.tempo} 2`; + if (score.tempoLabel) { + initialTempoAutomation.addElement('Text').innerText = score.tempoLabel; + } for (const mb of score.masterBars) { if (mb.index > 0 && mb.tempoAutomation) { const tempoAutomation = automations.addElement('Automation'); tempoAutomation.addElement('Type').innerText = 'Tempo'; - tempoAutomation.addElement('Linear').innerText = 'true'; + tempoAutomation.addElement('Linear').innerText = mb.tempoAutomation.isLinear ? 'true' : 'false'; tempoAutomation.addElement('Bar').innerText = mb.index.toString(); tempoAutomation.addElement('Position').innerText = mb.tempoAutomation.ratioPosition.toString(); tempoAutomation.addElement('Visible').innerText = 'true'; tempoAutomation.addElement('Value').innerText = `${mb.tempoAutomation.value} 2`; + if (mb.tempoAutomation.text) { + tempoAutomation.addElement('Text').innerText = mb.tempoAutomation.text; + } } } } @@ -602,7 +811,7 @@ export class GpifWriter { const channelStrip = rse.addElement('ChannelStrip'); channelStrip.attributes.set('version', 'E56'); - const channelStripParameters = rse.addElement('Parameters'); + const channelStripParameters = channelStrip.addElement('Parameters'); channelStripParameters.innerText = `0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 ${track.playbackInfo.balance / 16} ${track.playbackInfo.volume / 16} 0.5 0.5 0.5`; } @@ -618,6 +827,7 @@ export class GpifWriter { const properties = staffNode.addElement('Properties'); this.writeSimplePropertyNode(properties, 'CapoFret', 'Fret', staff.capo.toString()); + this.writeSimplePropertyNode(properties, 'FretCount', 'Fret', "24"); const tuningProperty = this.writeSimplePropertyNode(properties, 'Tuning', 'Pitches', staff.tuning.slice().reverse().join(' ')); tuningProperty.addElement('Flat'); @@ -629,6 +839,10 @@ export class GpifWriter { this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join('')); + this.writeSimplePropertyNode(properties, 'TuningFlat', 'Enable', null); + + + this.writeDiagramCollection(properties, staff); } @@ -677,11 +891,22 @@ export class GpifWriter { }); } - private writeSimplePropertyNode(parent: XmlNode, propertyName: string, propertyValueTag: string, propertyValue: string | null) { + private writeSimplePropertyNode(parent: XmlNode, propertyName: string, propertyValueTagName: string, propertyValue: string | null) { const prop = parent.addElement('Property'); prop.attributes.set('name', propertyName); + const propertyValueTag = prop.addElement(propertyValueTagName); if (propertyValue !== null) { - prop.addElement(propertyValueTag).innerText = propertyValue; + propertyValueTag.innerText = propertyValue; + } + return prop; + } + + private writeSimpleXPropertyNode(parent: XmlNode, propertyId: string, propertyValueTagName: string, propertyValue: string | null) { + const prop = parent.addElement('XProperty'); + prop.attributes.set('id', propertyId); + const propertyValueTag = prop.addElement(propertyValueTagName); + if (propertyValue !== null) { + propertyValueTag.innerText = propertyValue; } return prop; } @@ -751,8 +976,8 @@ export class GpifWriter { const octaveTranspose = Math.floor(track.staves[0].displayTranspositionPitch / 12); const chromaticTranspose = track.staves[0].displayTranspositionPitch - (octaveTranspose * 12); - transpose.addElement('Chromatic').innerText = octaveTranspose.toString(); - transpose.addElement('Octave').innerText = chromaticTranspose.toString(); + transpose.addElement('Chromatic').innerText = chromaticTranspose.toString(); + transpose.addElement('Octave').innerText = octaveTranspose.toString(); } private writeInstrumentSetNode(trackNode: XmlNode, track: Track) { @@ -902,15 +1127,20 @@ export class GpifWriter { const barNode = parent.addElement('Bar'); barNode.attributes.set('id', bar.id.toString()); - barNode.addElement('Voices').innerText = bar.voices.map(v => v.id).join(' '); + barNode.addElement('Voices').innerText = bar.voices.map(v => v.isEmpty ? '-1' : v.id).join(' '); barNode.addElement('Clef').innerText = Clef[bar.clef]; - barNode.addElement('Ottavia').innerText = Clef[bar.clef].substr(1); + if (bar.clefOttava !== Ottavia.Regular) { + barNode.addElement('Ottavia').innerText = Ottavia[bar.clefOttava].substr(1); + } if (bar.simileMark !== SimileMark.None) { barNode.addElement('SimileMark').innerText = SimileMark[bar.simileMark]; } } private writeVoiceNode(parent: XmlNode, voice: Voice) { + if (voice.isEmpty) { + return; + } const voiceNode = parent.addElement('Voice'); voiceNode.attributes.set('id', voice.id.toString()); voiceNode.addElement('Beats').innerText = voice.beats.map(v => v.id).join(' '); diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 9f4e3aafc..15f125224 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -1980,11 +1980,11 @@ export class GpifParser { } private toBendValue(gpxValue: number): number { - return (gpxValue * GpifParser.BendPointValueFactor) | 0; + return (gpxValue * GpifParser.BendPointValueFactor); } private toBendOffset(gpxOffset: number): number { - return (gpxOffset * GpifParser.BendPointPositionFactor) | 0; + return (gpxOffset * GpifParser.BendPointPositionFactor); } private parseRhythms(node: XmlNode): void { diff --git a/src/model/Tuning.ts b/src/model/Tuning.ts index 1399c1f14..8af8309b8 100644 --- a/src/model/Tuning.ts +++ b/src/model/Tuning.ts @@ -13,11 +13,11 @@ export class Tuning { return includeOctave ? parts.join('') : parts[0]; } - public static getTextPartsForTuning(tuning: number): string[] { + public static getTextPartsForTuning(tuning: number, octaveShift: number = -1): string[] { let octave: number = (tuning / 12) | 0; let note: number = tuning % 12; let notes: string[] = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']; - return [notes[note], (octave - 1).toString()]; + return [notes[note], (octave - octaveShift).toString()]; } /** diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index c1da7b9f5..352764e93 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -111,7 +111,7 @@ export class XmlNode { public setCData(s:string) { const textNode = new XmlNode(); textNode.nodeType = XmlNodeType.CDATA; - textNode.value = s; + textNode.value = s ?? ""; this.childNodes = [textNode]; } } diff --git a/src/xml/XmlWriter.ts b/src/xml/XmlWriter.ts index 588541d13..653a49d4d 100644 --- a/src/xml/XmlWriter.ts +++ b/src/xml/XmlWriter.ts @@ -64,7 +64,7 @@ export class XmlWriter { } break; case XmlNodeType.CDATA: - if (xml.value) { + if (xml.value !== null) { this.write(``); } break; diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts new file mode 100644 index 000000000..a805f6341 --- /dev/null +++ b/test/exporter/Gp7Exporter.test.ts @@ -0,0 +1,226 @@ +import { Gp7Importer } from '@src/importer/Gp7Importer'; +import { ByteBuffer } from '@src/io/ByteBuffer'; +import { Score } from '@src/model/Score'; +import { Settings } from '@src/Settings'; +import { TestPlatform } from '@test/TestPlatform'; +import { Gp7Exporter } from '@src/exporter/Gp7Exporter'; +import { JsonConverter } from '@src/model/JsonConverter'; + +describe('Gp7ExporterTest', () => { + const prepareGp7ImporterWithFile: (name: string) => Promise = async (name: string): Promise => { + const data = await TestPlatform.loadFile('test-data/' + name); + return prepareGp7ImporterWithBytes(data); + }; + + const prepareGp7ImporterWithBytes: (buffer: Uint8Array) => Gp7Importer = (buffer: Uint8Array): Gp7Importer => { + let readerBase: Gp7Importer = new Gp7Importer(); + readerBase.init(ByteBuffer.fromBuffer(buffer), new Settings()); + return readerBase; + }; + + const exportGp7: (score: Score) => Uint8Array = (score: Score): Uint8Array => { + return new Gp7Exporter().export(score, null); + }; + + function expectJsonEqual(expected: any, actual: any, path: string) { + const expectedType = typeof expected; + const actualType = typeof actual; + + expect(actualType).withContext(`Type Mismatch on hierarchy: ${path}`).toEqual(expectedType); + + switch (actualType) { + case 'boolean': + expect(actual).withContext(`Boolean mismatch on hierarchy: ${path}`).toEqual(expected); + break; + case 'number': + expect(actual).withContext(`Number mismatch on hierarchy: ${path}`).toBeCloseTo(expected); + break; + case 'object': + expect(Array.isArray(actual)).withContext(`Array Type Mismatch on hierarchy: ${path}`).toEqual(Array.isArray(expected)); + expect(actual === null).withContext(`Null Mismatch on hierarchy: ${path}`).toEqual(expected === null); + if (actual) { + if (Array.isArray(expected) && Array.isArray(actual)) { + expect(actual.length).withContext(`Array Length Mismatch on hierarchy: ${path}`).toEqual(expected.length); + for (let i = 0; i < actual.length; i++) { + expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); + } + } else { + const expectedKeys = Object.keys(expected); + const actualKeys = Object.keys(actual); + expectedKeys.sort(); + actualKeys.sort(); + expect(actualKeys.join(',')).withContext(`Object Keys Mismatch on hierarchy: ${path}`).toEqual(expectedKeys.join(',')); + + for (const key of actualKeys) { + switch (key) { + // some ignored keys + case 'id': + case 'hammerPullOriginId': + case 'hammerPullDestinationId': + case 'tieOriginId': + case 'tieDestinationId': + break; + default: + expectJsonEqual(expected[key], actual[key], `${path}.${key}`); + break; + } + } + } + } + break; + case 'string': + expect(actual).withContext(`String mismatch on hierarchy: ${path}`).toEqual(expected); + break; + case 'undefined': + expect(actual).withContext(`null mismatch on hierarchy: ${path}`).toEqual(expected); + break; + } + } + + const testRoundTripEqual: (name: string) => Promise = async (name: string): Promise => { + const expected = (await prepareGp7ImporterWithFile(name)).readScore(); + const exported = exportGp7(expected); + const actual = prepareGp7ImporterWithBytes(exported).readScore(); + + const expectedJson = JsonConverter.scoreToJsObject(expected); + const actualJson = JsonConverter.scoreToJsObject(actual) + + expectJsonEqual(expectedJson, actualJson, ""); + }; + + it('score-info', async () => { + await testRoundTripEqual('guitarpro7/score-info.gp'); + }); + + it('notes', async () => { + await testRoundTripEqual('guitarpro7/notes.gp'); + }); + + it('time-signatures', async () => { + await testRoundTripEqual('guitarpro7/time-signatures.gp'); + }); + + it('dead', async () => { + await testRoundTripEqual('guitarpro7/dead.gp'); + }); + + it('grace', async () => { + await testRoundTripEqual('guitarpro7/grace.gp'); + }); + + it('accentuations', async () => { + await testRoundTripEqual('guitarpro7/accentuations.gp'); + }); + + it('harmonics', async () => { + await testRoundTripEqual('guitarpro7/harmonics.gp'); + }); + + it('hammer', async () => { + await testRoundTripEqual('guitarpro7/hammer.gp'); + }); + + it('bend', async () => { + await testRoundTripEqual('guitarpro7/bends.gp'); + }); + + it('bends-advanced', async () => { + await testRoundTripEqual('guitarpro7/bends-advanced.gp'); + }); + + it('whammy-advanced', async () => { + await testRoundTripEqual('guitarpro7/whammy-advanced.gp'); + }); + + it('tremolo', async () => { + await testRoundTripEqual('guitarpro7/tremolo.gp'); + }); + + it('slides', async () => { + await testRoundTripEqual('guitarpro7/slides.gp'); + }); + + it('vibrato', async () => { + await testRoundTripEqual('guitarpro7/vibrato.gp'); + }); + + it('trills', async () => { + await testRoundTripEqual('guitarpro7/trills.gp'); + }); + + it('other-effects', async () => { + await testRoundTripEqual('guitarpro7/other-effects.gp'); + }); + + it('fingering', async () => { + await testRoundTripEqual('guitarpro7/fingering.gp'); + }); + + it('stroke', async () => { + await testRoundTripEqual('guitarpro7/strokes.gp'); + }); + + it('tuplets', async () => { + await testRoundTripEqual('guitarpro7/tuplets.gp'); + }); + + it('ranges', async () => { + await testRoundTripEqual('guitarpro7/ranges.gp'); + }); + + it('effects', async () => { + await testRoundTripEqual('guitarpro7/effects.gp'); + }); + + it('serenade', async () => { + await testRoundTripEqual('guitarpro7/serenade.gp'); + }); + + it('strings', async () => { + await testRoundTripEqual('guitarpro7/strings.gp'); + }); + + it('key-signatures', async () => { + await testRoundTripEqual('guitarpro7/key-signatures.gp'); + }); + + it('chords', async () => { + await testRoundTripEqual('guitarpro7/chords.gp'); + }); + + it('colors', async () => { + await testRoundTripEqual('guitarpro7/colors.gp'); + }); + + it('tremolo-vibrato', async () => { + await testRoundTripEqual('guitarpro7/tremolo-vibrato.gp'); + }); + + it('ottavia', async () => { + await testRoundTripEqual('guitarpro7/ottavia.gp'); + }); + + it('simile-mark', async () => { + await testRoundTripEqual('guitarpro7/simile-mark.gp'); + }); + + it('anacrusis', async () => { + await testRoundTripEqual('guitarpro7/anacrusis.gp'); + }); + + it('left-hand-tap', async () => { + await testRoundTripEqual('guitarpro7/left-hand-tap.gp'); + }); + + it('fermata', async () => { + await testRoundTripEqual('guitarpro7/fermata.gp'); + }); + + it('pick-slide', async () => { + await testRoundTripEqual('guitarpro7/pick-slide.gp'); + }); + + it('beat-lyrics', async () => { + await testRoundTripEqual('guitarpro7/beat-lyrics.gp'); + }); +}); diff --git a/test/index.ts b/test/index.ts index 3007d2412..452ca3954 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1 +1,2 @@ -import '**/*.test.js'; \ No newline at end of file +// import '**/*.test.js'; +import '**/Gp7Exporter.test.js'; \ No newline at end of file From 67d438c88fa627e46949c1deab7ed2e00db7c38e Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 18:04:30 +0100 Subject: [PATCH 09/31] Fixed all tests --- src/exporter/GpifWriter.ts | 45 ++++++++++++++++++++++++------- src/importer/GpifParser.ts | 2 +- test/exporter/Gp7Exporter.test.ts | 12 +++++++++ 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 4661cdc0d..534e4c97c 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -318,7 +318,6 @@ export class GpifWriter { const pitch = property.addElement('Pitch'); const stepElement = pitch.addElement('Step'); const accidentalElement = pitch.addElement('Accidental'); - // TODO: respect accidentalmode switch (step) { case 'C': stepElement.innerText = 'C'; @@ -369,6 +368,22 @@ export class GpifWriter { accidentalElement.innerText = ''; break; } + + switch (accidental) { + case NoteAccidentalMode.ForceDoubleSharp: + accidentalElement.innerText = 'x'; + break; + case NoteAccidentalMode.ForceSharp: + accidentalElement.innerText = '#'; + break; + case NoteAccidentalMode.ForceFlat: + accidentalElement.innerText = 'b'; + break; + case NoteAccidentalMode.ForceDoubleFlat: + accidentalElement.innerText = 'bb'; + break; + } + pitch.addElement('Octave').innerText = octave; } @@ -504,11 +519,24 @@ export class GpifWriter { this.writeBeatProperties(beatNode, beat); this.writeBeatXProperties(beatNode, beat); + + if (beat.lyrics && beat.lyrics.length > 0) { + this.writeBeatLyrics(beatNode, beat.lyrics); + } + } + + private writeBeatLyrics(beatNode: XmlNode, lyrics: string[]) { + const lyricsNode = beatNode.addElement('Lyrics'); + for(const l of lyrics) { + const line = lyricsNode.addElement('Line'); + line.setCData(l); + } } + private writeBeatXProperties(beatNode: XmlNode, beat: Beat) { const beatProperties = beatNode.addElement('XProperties'); - if(beat.brushDuration > 0) { + if (beat.brushDuration > 0) { this.writeSimpleXPropertyNode(beatProperties, '687935489', 'Int', beat.brushDuration.toString()); } } @@ -923,18 +951,18 @@ export class GpifWriter { for (const beat of voice.beats) { if (beat.lyrics) { for (let l = 0; l < beat.lyrics.length; l++) { - if (l >= beat.lyrics.length) { + // initial create of the lines + while (l >= lines.length) { const newLyrics = new Lyrics(); newLyrics.startBar = bar.index; + newLyrics.text = '[Empty]'; lines.push(newLyrics); } const line = lines[l]; - if (line.text.length > 0) { - line.text += ' '; - } - - line.text += beat.lyrics[l]; + line.text = line.text == '[Empty]' + ? beat.lyrics[l] + : line.text + ' ' + beat.lyrics[l].split(' ').join('+'); } } } @@ -1083,7 +1111,6 @@ export class GpifWriter { return; } - // TODO: Fermata if (masterBar.fermata.size > 0) { const fermatas = parent.addElement('Fermatas'); masterBar.fermata.forEach((fermata, offset) => { diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 15f125224..997ac430a 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -1980,7 +1980,7 @@ export class GpifParser { } private toBendValue(gpxValue: number): number { - return (gpxValue * GpifParser.BendPointValueFactor); + return (gpxValue * GpifParser.BendPointValueFactor) | 0; } private toBendOffset(gpxOffset: number): number { diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index a805f6341..9a5cf0b9a 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -223,4 +223,16 @@ describe('Gp7ExporterTest', () => { it('beat-lyrics', async () => { await testRoundTripEqual('guitarpro7/beat-lyrics.gp'); }); + + // TODO: + // - test system layout + // - test playingstyle + // - test icons + // - test percussion tabs + // - test ForcedSound + // - test Program Changes + // - test staff instrument + // - test fingering + // - test chords + // - test special staff combinations (piano, non-tab) }); From 91b18fade1b21d41d26f9aec3c02f4875125282d Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 21:14:26 +0100 Subject: [PATCH 10/31] Better test infrastructure for Gp7 exporter --- karma.conf.js | 21 +++ src/exporter/GpifWriter.ts | 249 ++++++++++++++++++++++++-- src/importer/AlphaTexImporter.ts | 3 + src/importer/Gp3To5Importer.ts | 9 + src/midi/GeneralMidi.ts | 2 +- test/exporter/Gp7Exporter.test.ts | 278 ++++++++++++------------------ 6 files changed, 371 insertions(+), 191 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 19595f6e8..566253fca 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -95,6 +95,27 @@ module.exports = function (config) { res.send(JSON.stringify('OK')); } ); + app.post( + '/list-files', + upload.fields([ + { + name: 'expected', + maxCount: 1 + }, + { + name: 'actual', + maxCount: 1 + }, + { + name: 'diff', + maxCount: 1 + } + ]), + function (req, res) { + log.info(`save visual error ${req.file}`); + res.send(JSON.stringify('OK')); + } + ); } }, diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 534e4c97c..8476ee90a 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1,3 +1,4 @@ +import { GeneralMidi } from '@src/midi/GeneralMidi'; import { MidiUtils } from '@src/midi/MidiUtils'; import { AccentuationType } from '@src/model/AccentuationType'; import { Bar } from '@src/model/Bar'; @@ -19,6 +20,7 @@ import { Note } from '@src/model/Note'; import { NoteAccidentalMode } from '@src/model/NoteAccidentalMode'; import { Ottavia } from '@src/model/Ottavia'; import { PickStroke } from '@src/model/PickStroke'; +import { PlaybackInformation } from '@src/model/PlaybackInformation'; import { Score } from '@src/model/Score'; import { SimileMark } from '@src/model/SimileMark'; import { SlideInType } from '@src/model/SlideInType'; @@ -33,11 +35,170 @@ import { BeamDirection } from '@src/rendering/utils/BeamDirection'; import { XmlDocument } from '@src/xml/XmlDocument'; import { XmlNode } from '@src/xml/XmlNode'; +// Grabbed via Icon Picker beside track name in GP7 +enum GpifIconIds { + // Guitar & Basses + SteelGuitar = 1, + AcousticGuitar = 2, + TwelveStringGuitar = 3, + ElectricGuitar = 4, + Bass = 5, + ClassicalGuitar = 23, + UprightBass = 6, + Ukulele = 7, + Banjo = 8, + Mandolin = 9, + // Orchestral + Piano = 10, + Synth = 12, + Strings = 11, + Brass = 13, + Reed = 14, + Woodwind = 15, + Vocal = 16, + PitchedIdiophone = 17, + Fx = 21, + // Percussions + PercussionKit = 18, + Idiophone = 19, + Membraphone = 20 +} + /** * This class can write a score.gpif XML from a given score model. */ export class GpifWriter { private _rhythmIdLookup: Map = new Map(); + private static IconLookup: Map = new Map([ + [0, GpifIconIds.Piano], + [1, GpifIconIds.Piano], + [2, GpifIconIds.Piano], + [3, GpifIconIds.Piano], + [4, GpifIconIds.Piano], + [5, GpifIconIds.Piano], + [6, GpifIconIds.Piano], + [7, GpifIconIds.Piano], + [8, GpifIconIds.PitchedIdiophone], + [9, GpifIconIds.PitchedIdiophone], + [10, GpifIconIds.PitchedIdiophone], + [11, GpifIconIds.PitchedIdiophone], + [12, GpifIconIds.PitchedIdiophone], + [13, GpifIconIds.PitchedIdiophone], + [14, GpifIconIds.PitchedIdiophone], + [15, GpifIconIds.Banjo], + [16, GpifIconIds.Piano], + [17, GpifIconIds.Piano], + [18, GpifIconIds.Piano], + [19, GpifIconIds.Piano], + [20, GpifIconIds.Piano], + [21, GpifIconIds.Piano], + [22, GpifIconIds.Woodwind], + [23, GpifIconIds.Piano], + [24, GpifIconIds.ClassicalGuitar], + [25, GpifIconIds.SteelGuitar], + [26, GpifIconIds.SteelGuitar], + [27, GpifIconIds.ElectricGuitar], + [28, GpifIconIds.ElectricGuitar], + [29, GpifIconIds.ElectricGuitar], + [30, GpifIconIds.SteelGuitar], + [31, GpifIconIds.SteelGuitar], + [32, GpifIconIds.Bass], + [33, GpifIconIds.Bass], + [34, GpifIconIds.Bass], + [35, GpifIconIds.Bass], + [36, GpifIconIds.Bass], + [37, GpifIconIds.Bass], + [38, GpifIconIds.Synth], + [39, GpifIconIds.Synth], + [40, GpifIconIds.Strings], + [41, GpifIconIds.Strings], + [42, GpifIconIds.Strings], + [43, GpifIconIds.Strings], + [44, GpifIconIds.Strings], + [45, GpifIconIds.Strings], + [46, GpifIconIds.Piano], + [47, GpifIconIds.Membraphone], + [48, GpifIconIds.Strings], + [49, GpifIconIds.Strings], + [50, GpifIconIds.Strings], + [51, GpifIconIds.Strings], + [52, GpifIconIds.Vocal], + [53, GpifIconIds.Vocal], + [54, GpifIconIds.Vocal], + [55, GpifIconIds.Synth], + [56, GpifIconIds.Brass], + [57, GpifIconIds.Brass], + [58, GpifIconIds.Brass], + [59, GpifIconIds.Brass], + [60, GpifIconIds.Brass], + [61, GpifIconIds.Brass], + [62, GpifIconIds.Brass], + [63, GpifIconIds.Brass], + [64, GpifIconIds.Reed], + [65, GpifIconIds.Reed], + [66, GpifIconIds.Reed], + [67, GpifIconIds.Reed], + [68, GpifIconIds.Reed], + [69, GpifIconIds.Reed], + [70, GpifIconIds.Reed], + [71, GpifIconIds.Reed], + [72, GpifIconIds.Reed], + [73, GpifIconIds.Woodwind], + [74, GpifIconIds.Woodwind], + [75, GpifIconIds.Woodwind], + [76, GpifIconIds.Woodwind], + [77, GpifIconIds.Woodwind], + [78, GpifIconIds.Woodwind], + [79, GpifIconIds.Woodwind], + [80, GpifIconIds.Synth], + [81, GpifIconIds.Synth], + [82, GpifIconIds.Synth], + [83, GpifIconIds.Synth], + [84, GpifIconIds.Synth], + [85, GpifIconIds.Synth], + [86, GpifIconIds.Synth], + [87, GpifIconIds.Synth], + [88, GpifIconIds.Synth], + [89, GpifIconIds.Synth], + [90, GpifIconIds.Synth], + [91, GpifIconIds.Synth], + [92, GpifIconIds.Synth], + [93, GpifIconIds.Synth], + [94, GpifIconIds.Synth], + [95, GpifIconIds.Synth], + [96, GpifIconIds.Fx], + [97, GpifIconIds.Fx], + [98, GpifIconIds.Fx], + [99, GpifIconIds.Fx], + [100, GpifIconIds.Fx], + [101, GpifIconIds.Fx], + [102, GpifIconIds.Fx], + [103, GpifIconIds.Fx], + [104, GpifIconIds.ElectricGuitar], + [105, GpifIconIds.Banjo], + [106, GpifIconIds.Ukulele], + [107, GpifIconIds.Banjo], + [108, GpifIconIds.PitchedIdiophone], + [109, GpifIconIds.Reed], + [110, GpifIconIds.Strings], + [111, GpifIconIds.Woodwind], + [112, GpifIconIds.PitchedIdiophone], + [113, GpifIconIds.Idiophone], + [114, GpifIconIds.PitchedIdiophone], + [115, GpifIconIds.Idiophone], + [116, GpifIconIds.Membraphone], + [117, GpifIconIds.Membraphone], + [118, GpifIconIds.Membraphone], + [119, GpifIconIds.Idiophone], + [120, GpifIconIds.Fx], + [121, GpifIconIds.Fx], + [122, GpifIconIds.Fx], + [123, GpifIconIds.Fx], + [124, GpifIconIds.Fx], + [125, GpifIconIds.Fx], + [126, GpifIconIds.Fx], + [127, GpifIconIds.Fx] + ]) public writeXml(score: Score): string { const xmlDocument = new XmlDocument(); @@ -524,10 +685,10 @@ export class GpifWriter { this.writeBeatLyrics(beatNode, beat.lyrics); } } - + private writeBeatLyrics(beatNode: XmlNode, lyrics: string[]) { const lyricsNode = beatNode.addElement('Lyrics'); - for(const l of lyrics) { + for (const l of lyrics) { const line = lyricsNode.addElement('Line'); line.setCData(l); } @@ -709,7 +870,6 @@ export class GpifWriter { scoreNode.addElement('PageHeader').setCData(''); scoreNode.addElement('PageFooter').setCData(''); - // TODO: find out right avlues scoreNode.addElement('ScoreSystemsDefaultLayout').setCData('4'); scoreNode.addElement('ScoreSystemsLayout').setCData('4'); @@ -777,19 +937,19 @@ export class GpifWriter { trackNode.addElement('ShortName').setCData(track.shortName); trackNode.addElement('Color').innerText = `${track.color.r} ${track.color.g} ${track.color.b}`; - // TODO right value + // Note: unclear what these values mean, various combinations in GP7 lead to these values trackNode.addElement('SystemsDefautLayout').innerText = "3"; - trackNode.addElement('SystemsLayout').innerText = "2"; + trackNode.addElement('SystemsLayout').innerText = "1"; trackNode.addElement('AutoBrush'); trackNode.addElement('PalmMute').innerText = '0'; - // TODO: StringedPick for guitars - trackNode.addElement('PlayingStyle').innerText = 'Default'; + trackNode.addElement('PlayingStyle').innerText = GeneralMidi.isGuitar(track.playbackInfo.program) + ? 'StringedPick' + : 'Default'; trackNode.addElement('UseOneChannelPerString'); - // TODO right values - trackNode.addElement('IconId').innerText = '8'; + trackNode.addElement('IconId').innerText = GpifWriter.getIconId(track.playbackInfo).toString(); this.writeInstrumentSetNode(trackNode, track); // TODO write notationpatch @@ -797,7 +957,6 @@ export class GpifWriter { this.writeRseNode(trackNode, track); - // TODO right values trackNode.addElement('ForcedSound').innerText = '-1'; this.writeSoundsNode(trackNode, track); @@ -820,6 +979,16 @@ export class GpifWriter { this.writeAutomations(trackNode, track); } + private static getIconId(playbackInfo: PlaybackInformation): GpifIconIds { + if (playbackInfo.primaryChannel === 9) { + return GpifIconIds.PercussionKit; + } + if (GpifWriter.IconLookup.has(playbackInfo.program)) { + return GpifWriter.IconLookup.get(playbackInfo.program)!; + } + return GpifIconIds.SteelGuitar; + } + private writeAutomations(trackNode: XmlNode, _track: Track) { trackNode.addElement('Automations'); // TODO: instrument automations @@ -859,18 +1028,61 @@ export class GpifWriter { const tuningProperty = this.writeSimplePropertyNode(properties, 'Tuning', 'Pitches', staff.tuning.slice().reverse().join(' ')); tuningProperty.addElement('Flat'); - // TODO: right values - tuningProperty.addElement('Instrument').innerText = 'Guitar'; - tuningProperty.addElement('Label').setCData(''); - tuningProperty.addElement('LabelVisible').innerText = 'true'; + + switch (staff.tuning.length) { + case 3: + tuningProperty.addElement('Instrument').innerText = 'Shamisen'; + break; + case 4: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else if (staff.track.playbackInfo.program == 42) { + tuningProperty.addElement('Instrument').innerText = 'Cello'; + } else if (staff.track.playbackInfo.program == 43) { + tuningProperty.addElement('Instrument').innerText = 'Contrabass'; + } else if (staff.track.playbackInfo.program == 40) { + tuningProperty.addElement('Instrument').innerText = 'Violin'; + } else if (staff.track.playbackInfo.program == 41) { + tuningProperty.addElement('Instrument').innerText = 'Viola'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } + break; + case 5: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } + break; + case 6: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else if (staff.track.playbackInfo.program <= 39) { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + } + break; + case 7: + if (staff.track.playbackInfo.program <= 39) { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + } + break; + default: + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + break; + } + tuningProperty.addElement('Label').setCData(staff.tuningName ?? ""); + tuningProperty.addElement('LabelVisible').innerText = staff.tuningName ? "true" : "false"; this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join('')); this.writeSimplePropertyNode(properties, 'TuningFlat', 'Enable', null); - - this.writeDiagramCollection(properties, staff); } @@ -915,7 +1127,7 @@ export class GpifWriter { showFingering.attributes.set('value', chord.showFingering ? "true" : "false"); - // TOOD Chord details + // TODO Chord details }); } @@ -1087,8 +1299,7 @@ export class GpifWriter { const alternateEndings: number[] = []; let bit = 0; while (remainingBits > 0) { - - if ((remainingBits >> bit)) { + if ((remainingBits >> bit) & 0x01) { alternateEndings.push(bit + 1); // clear bit remainingBits &= ~(1 << bit); diff --git a/src/importer/AlphaTexImporter.ts b/src/importer/AlphaTexImporter.ts index da025f106..d9d0a6816 100644 --- a/src/importer/AlphaTexImporter.ts +++ b/src/importer/AlphaTexImporter.ts @@ -553,6 +553,9 @@ export class AlphaTexImporter extends ScoreImporter { } private score(): void { + if(this._sy === AlphaTexSymbols.Eof) { + this.errorMessage('Unexpected end of file'); + } this.metaData(); this.bars(); } diff --git a/src/importer/Gp3To5Importer.ts b/src/importer/Gp3To5Importer.ts index b188515a0..ee0d83297 100644 --- a/src/importer/Gp3To5Importer.ts +++ b/src/importer/Gp3To5Importer.ts @@ -130,6 +130,14 @@ export class Gp3To5Importer extends ScoreImporter { this.readMasterBars(); this.readTracks(); this.readBars(); + + // To be more in line with the GP7 structure we create an + // initial tempo automation on the first masterbar + if (this._score.masterBars.length > 0) { + this._score.masterBars[0].tempoAutomation = Automation.buildTempoAutomation(false, 0, this._score.tempo, 2); + this._score.masterBars[0].tempoAutomation.text = this._score.tempoLabel; + } + this._score.finish(this.settings); if (this._lyrics && this._lyricsTrack >= 0) { this._score.tracks[this._lyricsTrack].applyLyrics(this._lyrics); @@ -322,6 +330,7 @@ export class Gp3To5Importer extends ScoreImporter { newMasterBar.tripletFeel = this._globalTripletFeel; } newMasterBar.isDoubleBar = (flags & 0x80) !== 0; + this._score.addMasterBar(newMasterBar); } diff --git a/src/midi/GeneralMidi.ts b/src/midi/GeneralMidi.ts index 8ab0534e2..27eee7a29 100644 --- a/src/midi/GeneralMidi.ts +++ b/src/midi/GeneralMidi.ts @@ -50,6 +50,6 @@ export class GeneralMidi { } public static isGuitar(program: number): boolean { - return program >= 24 && program <= 39 || program===105 || program===43; + return program >= 24 && program <= 39 || program === 105 || program === 43; } } diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 9a5cf0b9a..9522a5438 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -5,11 +5,17 @@ import { Settings } from '@src/Settings'; import { TestPlatform } from '@test/TestPlatform'; import { Gp7Exporter } from '@src/exporter/Gp7Exporter'; import { JsonConverter } from '@src/model/JsonConverter'; +import { ScoreLoader } from '@src/importer/ScoreLoader'; describe('Gp7ExporterTest', () => { - const prepareGp7ImporterWithFile: (name: string) => Promise = async (name: string): Promise => { + const loadScore: (name: string) => Promise = async (name: string): Promise => { const data = await TestPlatform.loadFile('test-data/' + name); - return prepareGp7ImporterWithBytes(data); + try { + return ScoreLoader.loadScoreFromBytes(data); + } + catch { + return null; + } }; const prepareGp7ImporterWithBytes: (buffer: Uint8Array) => Gp7Importer = (buffer: Uint8Array): Gp7Importer => { @@ -26,213 +32,143 @@ describe('Gp7ExporterTest', () => { const expectedType = typeof expected; const actualType = typeof actual; - expect(actualType).withContext(`Type Mismatch on hierarchy: ${path}`).toEqual(expectedType); + // NOTE: performance wise expect() seems quite expensive + // that's why we do a manual check for most asserts + + if (actualType != expectedType) { + fail(`Type Mismatch on hierarchy: ${path}, '${actualType}' != '${expectedType}'`); + } switch (actualType) { case 'boolean': - expect(actual).withContext(`Boolean mismatch on hierarchy: ${path}`).toEqual(expected); + if ((actual as boolean) != (expected as boolean)) { + fail(`Boolean mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } break; case 'number': - expect(actual).withContext(`Number mismatch on hierarchy: ${path}`).toBeCloseTo(expected); + if (Math.abs((actual as number) - (expected as number)) >= 0.000001) { + fail(`Number mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } break; case 'object': - expect(Array.isArray(actual)).withContext(`Array Type Mismatch on hierarchy: ${path}`).toEqual(Array.isArray(expected)); - expect(actual === null).withContext(`Null Mismatch on hierarchy: ${path}`).toEqual(expected === null); - if (actual) { - if (Array.isArray(expected) && Array.isArray(actual)) { - expect(actual.length).withContext(`Array Length Mismatch on hierarchy: ${path}`).toEqual(expected.length); - for (let i = 0; i < actual.length; i++) { - expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); + if ((actual === null) !== (expected === null)) { + fail(`Null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } else if (actual) { + if (Array.isArray(actual) !== Array.isArray(expected)) { + fail(`IsArray mismatch on hierarchy: ${path}`); + } else if (Array.isArray(actual) && Array.isArray(expected)) { + if (actual.length !== expected.length) { + fail(`Array Length mismatch on hierarchy: ${path}, ${actual.length} != ${expected.length}`); + } else { + for (let i = 0; i < actual.length; i++) { + expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); + } } } else { + const expectedKeys = Object.keys(expected); const actualKeys = Object.keys(actual); expectedKeys.sort(); actualKeys.sort(); - expect(actualKeys.join(',')).withContext(`Object Keys Mismatch on hierarchy: ${path}`).toEqual(expectedKeys.join(',')); - - for (const key of actualKeys) { - switch (key) { - // some ignored keys - case 'id': - case 'hammerPullOriginId': - case 'hammerPullDestinationId': - case 'tieOriginId': - case 'tieDestinationId': - break; - default: - expectJsonEqual(expected[key], actual[key], `${path}.${key}`); - break; + + const actualKeyList = actualKeys.join(','); + const expectedKeyList = expectedKeys.join(','); + if (actualKeyList !== expectedKeyList) { + fail(`Object Keys mismatch on hierarchy: ${path}, '${actualKeyList}' != '${expectedKeyList}'`); + } else { + for (const key of actualKeys) { + switch (key) { + // some ignored keys + case 'id': + case 'hammerPullOriginId': + case 'hammerPullDestinationId': + case 'tieOriginId': + case 'tieDestinationId': + break; + default: + expectJsonEqual(expected[key], actual[key], `${path}.${key}`); + break; + } } + } } } break; case 'string': - expect(actual).withContext(`String mismatch on hierarchy: ${path}`).toEqual(expected); + if ((actual as string) != (expected as string)) { + fail(`String mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } break; case 'undefined': - expect(actual).withContext(`null mismatch on hierarchy: ${path}`).toEqual(expected); + if (actual !== expected) { + fail(`null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } break; } } const testRoundTripEqual: (name: string) => Promise = async (name: string): Promise => { - const expected = (await prepareGp7ImporterWithFile(name)).readScore(); - const exported = exportGp7(expected); - const actual = prepareGp7ImporterWithBytes(exported).readScore(); + try { + const expected = await loadScore(name); + if (!expected) { + return; + } - const expectedJson = JsonConverter.scoreToJsObject(expected); - const actualJson = JsonConverter.scoreToJsObject(actual) + const exported = exportGp7(expected); + const actual = prepareGp7ImporterWithBytes(exported).readScore(); - expectJsonEqual(expectedJson, actualJson, ""); + const expectedJson = JsonConverter.scoreToJsObject(expected); + const actualJson = JsonConverter.scoreToJsObject(actual) + + expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); + } catch (e) { + fail(e); + } }; - it('score-info', async () => { - await testRoundTripEqual('guitarpro7/score-info.gp'); - }); + const testRoundTripFolderEqual: (name: string) => Promise = async (name: string): Promise => { + const files: string[] = await TestPlatform.listDirectory(`test-data/${name}`); + for (const file of files) { + await testRoundTripEqual(`${name}/${file}`); + } + }; - it('notes', async () => { - await testRoundTripEqual('guitarpro7/notes.gp'); - }); + // Note: we just test all our importer and visual tests to cover all features - it('time-signatures', async () => { - await testRoundTripEqual('guitarpro7/time-signatures.gp'); - }); + it('importer', async () => { + await testRoundTripFolderEqual('guitarpro7'); + }, 60000); - it('dead', async () => { - await testRoundTripEqual('guitarpro7/dead.gp'); - }); + // it('visual-effects-and-annotations', async () => { + // await testRoundTripFolderEqual('visual-tests/effects-and-annotations'); + // }); - it('grace', async () => { - await testRoundTripEqual('guitarpro7/grace.gp'); - }); + // it('visual-general', async () => { + // await testRoundTripFolderEqual('visual-tests/general'); + // }); - it('accentuations', async () => { - await testRoundTripEqual('guitarpro7/accentuations.gp'); - }); + // it('visual-guitar-tabs', async () => { + // await testRoundTripFolderEqual('visual-tests/guitar-tabs'); + // }); - it('harmonics', async () => { - await testRoundTripEqual('guitarpro7/harmonics.gp'); - }); + // it('visual-layout', async () => { + // await testRoundTripFolderEqual('visual-tests/layout'); + // }); - it('hammer', async () => { - await testRoundTripEqual('guitarpro7/hammer.gp'); - }); + // it('visual-music-notation', async () => { + // await testRoundTripFolderEqual('visual-tests/music-notation'); + // }); - it('bend', async () => { - await testRoundTripEqual('guitarpro7/bends.gp'); - }); + // it('visual-notation-legend', async () => { + // await testRoundTripFolderEqual('visual-tests/notation-legend'); + // }); - it('bends-advanced', async () => { - await testRoundTripEqual('guitarpro7/bends-advanced.gp'); - }); + // it('visual-special-notes', async () => { + // await testRoundTripFolderEqual('visual-tests/special-notes'); + // }); - it('whammy-advanced', async () => { - await testRoundTripEqual('guitarpro7/whammy-advanced.gp'); - }); - - it('tremolo', async () => { - await testRoundTripEqual('guitarpro7/tremolo.gp'); - }); - - it('slides', async () => { - await testRoundTripEqual('guitarpro7/slides.gp'); - }); - - it('vibrato', async () => { - await testRoundTripEqual('guitarpro7/vibrato.gp'); - }); - - it('trills', async () => { - await testRoundTripEqual('guitarpro7/trills.gp'); - }); - - it('other-effects', async () => { - await testRoundTripEqual('guitarpro7/other-effects.gp'); - }); - - it('fingering', async () => { - await testRoundTripEqual('guitarpro7/fingering.gp'); - }); - - it('stroke', async () => { - await testRoundTripEqual('guitarpro7/strokes.gp'); - }); - - it('tuplets', async () => { - await testRoundTripEqual('guitarpro7/tuplets.gp'); - }); - - it('ranges', async () => { - await testRoundTripEqual('guitarpro7/ranges.gp'); - }); - - it('effects', async () => { - await testRoundTripEqual('guitarpro7/effects.gp'); - }); - - it('serenade', async () => { - await testRoundTripEqual('guitarpro7/serenade.gp'); - }); - - it('strings', async () => { - await testRoundTripEqual('guitarpro7/strings.gp'); - }); - - it('key-signatures', async () => { - await testRoundTripEqual('guitarpro7/key-signatures.gp'); - }); - - it('chords', async () => { - await testRoundTripEqual('guitarpro7/chords.gp'); - }); - - it('colors', async () => { - await testRoundTripEqual('guitarpro7/colors.gp'); - }); - - it('tremolo-vibrato', async () => { - await testRoundTripEqual('guitarpro7/tremolo-vibrato.gp'); - }); - - it('ottavia', async () => { - await testRoundTripEqual('guitarpro7/ottavia.gp'); - }); - - it('simile-mark', async () => { - await testRoundTripEqual('guitarpro7/simile-mark.gp'); - }); - - it('anacrusis', async () => { - await testRoundTripEqual('guitarpro7/anacrusis.gp'); - }); - - it('left-hand-tap', async () => { - await testRoundTripEqual('guitarpro7/left-hand-tap.gp'); - }); - - it('fermata', async () => { - await testRoundTripEqual('guitarpro7/fermata.gp'); - }); - - it('pick-slide', async () => { - await testRoundTripEqual('guitarpro7/pick-slide.gp'); - }); - - it('beat-lyrics', async () => { - await testRoundTripEqual('guitarpro7/beat-lyrics.gp'); - }); - - // TODO: - // - test system layout - // - test playingstyle - // - test icons - // - test percussion tabs - // - test ForcedSound - // - test Program Changes - // - test staff instrument - // - test fingering - // - test chords - // - test special staff combinations (piano, non-tab) + // it('visual-special-tracks', async () => { + // await testRoundTripFolderEqual('visual-tests/special-tracks'); + // }); }); From f5ef0b11dce6fc35fe83bffed7afa2cdd4695efe Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 21:26:41 +0100 Subject: [PATCH 11/31] WIP --- src/importer/GpifParser.ts | 14 ++++++++++++++ test/exporter/Gp7Exporter.test.ts | 8 ++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 997ac430a..a757408d3 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -2151,6 +2151,20 @@ export class GpifParser { trackIndex++; } } + + // clear out percussion articulations where not needed + for (const track of this.score.tracks) { + let hasPercussion = false; + for (const staff of track.staves) { + if (staff.isPercussion) { + hasPercussion = true; + break; + } + } + if(!hasPercussion) { + track.percussionArticulations = []; + } + } } // build masterbar automations this._masterTrackAutomations.forEach((automations, barIndex) => { diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 9522a5438..f3bacf04d 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -138,11 +138,11 @@ describe('Gp7ExporterTest', () => { it('importer', async () => { await testRoundTripFolderEqual('guitarpro7'); - }, 60000); + }); - // it('visual-effects-and-annotations', async () => { - // await testRoundTripFolderEqual('visual-tests/effects-and-annotations'); - // }); + it('visual-effects-and-annotations', async () => { + await testRoundTripFolderEqual('visual-tests/effects-and-annotations'); + }); // it('visual-general', async () => { // await testRoundTripFolderEqual('visual-tests/general'); From a034f33eb12d19afab6de2ddda5b7d452ab6f767 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 23:14:56 +0100 Subject: [PATCH 12/31] Update test suite to GP7 --- .../effects-and-annotations/brush.gp | Bin 0 -> 8979 bytes .../effects-and-annotations/brush.gp5 | Bin 1527 -> 0 bytes .../effects-and-annotations/chords.gp | Bin 0 -> 9966 bytes .../effects-and-annotations/chords.gp5 | Bin 2136 -> 0 bytes .../effects-and-annotations/dynamics.gp | Bin 0 -> 8848 bytes .../effects-and-annotations/dynamics.gp5 | Bin 1525 -> 0 bytes .../effects-and-annotations/fade-in.gp | Bin 0 -> 8918 bytes .../effects-and-annotations/fade-in.gp5 | Bin 1496 -> 0 bytes .../effects-and-annotations/fingering.gp | Bin 0 -> 11001 bytes .../effects-and-annotations/fingering.gpx | Bin 24150 -> 0 bytes .../effects-and-annotations/let-ring.gp | Bin 0 -> 9079 bytes .../effects-and-annotations/let-ring.gp5 | Bin 1639 -> 0 bytes .../effects-and-annotations/markers.gp | Bin 0 -> 8877 bytes .../effects-and-annotations/markers.gp5 | Bin 1689 -> 0 bytes .../effects-and-annotations/palm-mute.gp | Bin 0 -> 8847 bytes .../effects-and-annotations/palm-mute.gp5 | Bin 1743 -> 0 bytes .../effects-and-annotations/pick-stroke.gp | Bin 0 -> 8920 bytes .../effects-and-annotations/pick-stroke.gp5 | Bin 1605 -> 0 bytes .../effects-and-annotations/slides.gp | Bin 0 -> 9059 bytes .../effects-and-annotations/slides.gp5 | Bin 1654 -> 0 bytes .../effects-and-annotations/tap.gp | Bin 0 -> 8828 bytes .../effects-and-annotations/tap.gp5 | Bin 1466 -> 0 bytes .../effects-and-annotations/tempo.gp | Bin 0 -> 8774 bytes .../effects-and-annotations/tempo.gp5 | Bin 1650 -> 0 bytes .../effects-and-annotations/text.gp | Bin 0 -> 8885 bytes .../effects-and-annotations/text.gp5 | Bin 1552 -> 0 bytes .../effects-and-annotations/tremolo-bar.gp | Bin 9816 -> 9659 bytes .../tremolo-picking.gp | Bin 0 -> 9006 bytes .../tremolo-picking.gp5 | Bin 1677 -> 0 bytes .../effects-and-annotations/trill.gp | Bin 0 -> 8823 bytes .../effects-and-annotations/trill.gp5 | Bin 1479 -> 0 bytes .../effects-and-annotations/triplet-feel.gp | Bin 0 -> 9467 bytes .../effects-and-annotations/triplet-feel.gpx | Bin 16717 -> 0 bytes .../effects-and-annotations/tuning.png | Bin 25503 -> 0 bytes .../tuplets-advanced.gp | Bin 12171 -> 10313 bytes .../effects-and-annotations/tuplets.gp | Bin 0 -> 9242 bytes .../effects-and-annotations/tuplets.gp5 | Bin 1900 -> 0 bytes .../effects-and-annotations/vibrato.gp | Bin 0 -> 9009 bytes .../effects-and-annotations/vibrato.gp5 | Bin 1666 -> 0 bytes .../visual-tests/general/alternate-endings.gp | Bin 0 -> 8968 bytes .../general/alternate-endings.gp5 | Bin 1598 -> 0 bytes test-data/visual-tests/general/repeats.gp | Bin 0 -> 8842 bytes test-data/visual-tests/general/repeats.gp5 | Bin 1610 -> 0 bytes .../visual-tests/general/song-details.gp | Bin 0 -> 8694 bytes .../visual-tests/general/song-details.gp5 | Bin 1518 -> 0 bytes test-data/visual-tests/general/tuning.gp | Bin 0 -> 8861 bytes test-data/visual-tests/general/tuning.gp5 | Bin 1486 -> 0 bytes .../guitar-tabs/rhythm-with-beams.gp | Bin 0 -> 9987 bytes .../guitar-tabs/rhythm-with-beams.gp5 | Bin 2136 -> 0 bytes test-data/visual-tests/guitar-tabs/rhythm.gp | Bin 0 -> 9965 bytes test-data/visual-tests/guitar-tabs/rhythm.gp5 | Bin 2136 -> 0 bytes .../guitar-tabs/string-variations.gp | Bin 0 -> 9355 bytes .../guitar-tabs/string-variations.gp5 | Bin 2903 -> 0 bytes .../layout/horizontal-layout-5to8.gp | Bin 0 -> 16665 bytes .../layout/horizontal-layout-5to8.gp5 | Bin 5572 -> 0 bytes .../visual-tests/layout/horizontal-layout.gp | Bin 0 -> 16665 bytes .../visual-tests/layout/horizontal-layout.gp5 | Bin 5572 -> 0 bytes test-data/visual-tests/layout/multi-track.gp | Bin 0 -> 16665 bytes test-data/visual-tests/layout/multi-track.gp5 | Bin 5572 -> 0 bytes test-data/visual-tests/layout/multi-voice.gp | Bin 0 -> 9301 bytes test-data/visual-tests/layout/multi-voice.gp5 | Bin 3322 -> 0 bytes .../layout/page-layout-5barsperrow.gp | Bin 0 -> 16665 bytes .../layout/page-layout-5barsperrow.gp5 | Bin 5572 -> 0 bytes .../visual-tests/layout/page-layout-5to8.gp | Bin 0 -> 16665 bytes .../visual-tests/layout/page-layout-5to8.gp5 | Bin 5572 -> 0 bytes test-data/visual-tests/layout/page-layout.gp | Bin 0 -> 16665 bytes test-data/visual-tests/layout/page-layout.gp5 | Bin 5572 -> 0 bytes .../music-notation/accidentals.gp | Bin 0 -> 9142 bytes .../music-notation/accidentals.gp5 | Bin 1608 -> 0 bytes .../visual-tests/music-notation/clefs.gp | Bin 0 -> 8455 bytes .../visual-tests/music-notation/clefs.gpx | Bin 14892 -> 0 bytes .../music-notation/forced-accidentals.gp | Bin 9872 -> 9626 bytes .../music-notation/key-signatures.gp | Bin 16335 -> 10671 bytes .../music-notation/notes-rests-beams.gp | Bin 0 -> 10156 bytes .../music-notation/notes-rests-beams.gp5 | Bin 2501 -> 0 bytes .../music-notation/time-signatures.gp | Bin 0 -> 8685 bytes .../music-notation/time-signatures.gp5 | Bin 1495 -> 0 bytes .../visual-tests/special-notes/dead-notes.gp | Bin 0 -> 8989 bytes .../visual-tests/special-notes/dead-notes.gp5 | Bin 1786 -> 0 bytes .../visual-tests/special-notes/ghost-notes.gp | Bin 0 -> 8937 bytes .../special-notes/ghost-notes.gp5 | Bin 1485 -> 0 bytes .../special-notes/grace-notes-advanced.gp | Bin 9336 -> 9239 bytes .../visual-tests/special-notes/grace-notes.gp | Bin 0 -> 8986 bytes .../special-notes/grace-notes.gp5 | Bin 1491 -> 0 bytes .../visual-tests/special-notes/tied-notes.gp | Bin 0 -> 9203 bytes .../visual-tests/special-notes/tied-notes.gp5 | Bin 1588 -> 0 bytes .../special-tracks/grand-staff.gp | Bin 0 -> 9715 bytes .../special-tracks/grand-staff.gpx | Bin 16261 -> 0 bytes .../visual-tests/special-tracks/percussion.gp | Bin 19671 -> 19629 bytes .../features/EffectsAndAnnotations.test.ts | 36 +++++++++--------- test/visualTests/features/General.test.ts | 8 ++-- test/visualTests/features/GuitarTabs.test.ts | 6 +-- test/visualTests/features/Layout.test.ts | 14 +++---- .../features/MusicNotation.test.ts | 8 ++-- .../visualTests/features/SpecialNotes.test.ts | 8 ++-- .../features/SpecialTracks.test.ts | 2 +- 96 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 test-data/visual-tests/effects-and-annotations/brush.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/brush.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/chords.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/chords.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/dynamics.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/dynamics.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/fade-in.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/fade-in.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/fingering.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/fingering.gpx create mode 100644 test-data/visual-tests/effects-and-annotations/let-ring.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/let-ring.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/markers.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/markers.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/palm-mute.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/palm-mute.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/pick-stroke.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/pick-stroke.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/slides.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/slides.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/tap.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/tap.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/tempo.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/tempo.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/text.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/text.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/tremolo-picking.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/tremolo-picking.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/trill.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/trill.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/triplet-feel.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/triplet-feel.gpx delete mode 100644 test-data/visual-tests/effects-and-annotations/tuning.png create mode 100644 test-data/visual-tests/effects-and-annotations/tuplets.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/tuplets.gp5 create mode 100644 test-data/visual-tests/effects-and-annotations/vibrato.gp delete mode 100644 test-data/visual-tests/effects-and-annotations/vibrato.gp5 create mode 100644 test-data/visual-tests/general/alternate-endings.gp delete mode 100644 test-data/visual-tests/general/alternate-endings.gp5 create mode 100644 test-data/visual-tests/general/repeats.gp delete mode 100644 test-data/visual-tests/general/repeats.gp5 create mode 100644 test-data/visual-tests/general/song-details.gp delete mode 100644 test-data/visual-tests/general/song-details.gp5 create mode 100644 test-data/visual-tests/general/tuning.gp delete mode 100644 test-data/visual-tests/general/tuning.gp5 create mode 100644 test-data/visual-tests/guitar-tabs/rhythm-with-beams.gp delete mode 100644 test-data/visual-tests/guitar-tabs/rhythm-with-beams.gp5 create mode 100644 test-data/visual-tests/guitar-tabs/rhythm.gp delete mode 100644 test-data/visual-tests/guitar-tabs/rhythm.gp5 create mode 100644 test-data/visual-tests/guitar-tabs/string-variations.gp delete mode 100644 test-data/visual-tests/guitar-tabs/string-variations.gp5 create mode 100644 test-data/visual-tests/layout/horizontal-layout-5to8.gp delete mode 100644 test-data/visual-tests/layout/horizontal-layout-5to8.gp5 create mode 100644 test-data/visual-tests/layout/horizontal-layout.gp delete mode 100644 test-data/visual-tests/layout/horizontal-layout.gp5 create mode 100644 test-data/visual-tests/layout/multi-track.gp delete mode 100644 test-data/visual-tests/layout/multi-track.gp5 create mode 100644 test-data/visual-tests/layout/multi-voice.gp delete mode 100644 test-data/visual-tests/layout/multi-voice.gp5 create mode 100644 test-data/visual-tests/layout/page-layout-5barsperrow.gp delete mode 100644 test-data/visual-tests/layout/page-layout-5barsperrow.gp5 create mode 100644 test-data/visual-tests/layout/page-layout-5to8.gp delete mode 100644 test-data/visual-tests/layout/page-layout-5to8.gp5 create mode 100644 test-data/visual-tests/layout/page-layout.gp delete mode 100644 test-data/visual-tests/layout/page-layout.gp5 create mode 100644 test-data/visual-tests/music-notation/accidentals.gp delete mode 100644 test-data/visual-tests/music-notation/accidentals.gp5 create mode 100644 test-data/visual-tests/music-notation/clefs.gp delete mode 100644 test-data/visual-tests/music-notation/clefs.gpx create mode 100644 test-data/visual-tests/music-notation/notes-rests-beams.gp delete mode 100644 test-data/visual-tests/music-notation/notes-rests-beams.gp5 create mode 100644 test-data/visual-tests/music-notation/time-signatures.gp delete mode 100644 test-data/visual-tests/music-notation/time-signatures.gp5 create mode 100644 test-data/visual-tests/special-notes/dead-notes.gp delete mode 100644 test-data/visual-tests/special-notes/dead-notes.gp5 create mode 100644 test-data/visual-tests/special-notes/ghost-notes.gp delete mode 100644 test-data/visual-tests/special-notes/ghost-notes.gp5 create mode 100644 test-data/visual-tests/special-notes/grace-notes.gp delete mode 100644 test-data/visual-tests/special-notes/grace-notes.gp5 create mode 100644 test-data/visual-tests/special-notes/tied-notes.gp delete mode 100644 test-data/visual-tests/special-notes/tied-notes.gp5 create mode 100644 test-data/visual-tests/special-tracks/grand-staff.gp delete mode 100644 test-data/visual-tests/special-tracks/grand-staff.gpx diff --git a/test-data/visual-tests/effects-and-annotations/brush.gp b/test-data/visual-tests/effects-and-annotations/brush.gp new file mode 100644 index 0000000000000000000000000000000000000000..400af2b1cd99f8388c130b1d09ba42ccf8f79f5a GIT binary patch literal 8979 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 NkPr}De}*6+{sSEmPI3SM literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/brush.gp5 b/test-data/visual-tests/effects-and-annotations/brush.gp5 deleted file mode 100644 index 052dc442b611df1ea532c046978429c25a1b89b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1527 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 BI`jYl literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/chords.gp5 b/test-data/visual-tests/effects-and-annotations/chords.gp5 deleted file mode 100644 index 168052771d3ea400ab217983c1c409b39b402c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2136 zcmeHH&2G~`5Z-m#Bn=G>AW)G2&1It^RG>%|a6wMok{UH6avW7$kkZ7Ih>##Vsni1! z55QY-;mn2C;KVh2vumers378qI?~L}e)F?4v-Yk(cbz?V*P~k7^(!7Vy#^g`-`{#D zG)b0=3KO!pEdK8L4bWYjSHQ}=7Oy?5Q<;a%Dc|+?chx1fs8+jbwkz1?RmJn&mamLo zWxv|4t1B>+4n|=wqQetX2MuqhWx)C*>UT9*Z?{}W-GS$A<5{LtqmD2hH{fyI8GSej z`$uobq?|_cmFL#>eDwsD$Cbf=JhnvS1yK+l2R+&(cQ_8hVQ1VQ4Lbumjcx_qNf`8s z1s=m{vvU-XdZ`|$rqc6%4b;$0EJbb!l-3P$AulHIe@|e#5b+F_!2I(#S^O>*h`|(n z&G})c`;N9!*!gM}@H6mJ@HUvA!+YQ|n2Aqe<`W3a^z%hod@-t#{D4U-v$UMeOJ|j5cW}c+;5-#{BMGp27ZT7({}fxT+;NgIHw|ljXcm)VVb| zECW25MKVn7y8d01ez2DN^f9>gSz~j;Dv{K&7LnvcLfWKj&Y@_*YilWGQCY= z;w&6zgF!j4W$BdZww9e}5ptf? zYJa*8ZiRF3@wx=8d?i?f_{(*~)tPaliS)QY?a2k1 b_|nW*qUU|n{Pu3C^`v*&5HO1U^uJB diff --git a/test-data/visual-tests/effects-and-annotations/dynamics.gp b/test-data/visual-tests/effects-and-annotations/dynamics.gp new file mode 100644 index 0000000000000000000000000000000000000000..37758724ad12de5b419a7b424b71dd8f06f70efc GIT binary patch literal 8848 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/dynamics.gp5 b/test-data/visual-tests/effects-and-annotations/dynamics.gp5 deleted file mode 100644 index 3229ddd1288c9a69b7b501e1cefb4f500c624505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1525 zcmeHHO;5r=5Tzf`q7wC>!GmTmYxIDE5j}XJRD?}HNLxZYR=NQqp{6ZF{-%EjXSxW% zM8iQm`I5Igv-945w42R7Ftf%g7OA$GV_2kRHOZuSQOG9}edSt`5`c9Z)FNX28od{* zSDJUo&cVM0J#u&6qjV05@*f=5i_8PgP*`BOOh2enbP$1)=c@j qf7Hc#VS>E^5U{W%=Mu8?YYUgY>iPhp0+rPO diff --git a/test-data/visual-tests/effects-and-annotations/fade-in.gp b/test-data/visual-tests/effects-and-annotations/fade-in.gp new file mode 100644 index 0000000000000000000000000000000000000000..801a913eeb4b845792f97204dc82e863c49baece GIT binary patch literal 8918 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

3C{ z&qjtF3iQDB@i_^q zj-mFq3w<4Z!9Yy?;X|{0SVZx!N~^LG4Ss=q=kF^WYOI-3+w#Vf3xy(=yT3F>EkLGB~M3MV^yCs|j6SC5kI+P}p~fWSQ` z9Mw;cvEtKrbhO3ZGOsCSdY9+gY{7(1{;iB`dbK6x*|L5%%Zh z4W-?k^OHc*^hZ2tyo)#GR1<{K9}9-INQI1$E88hL1Q;`aZ6GJ5{H=e66VKAOY6Vu1gp+1SGhPcC> zS7G=?7soiuBu8C?qZwa^5kNE|({aAdDKeOMlD^wGw2e#*E8U;*g|ih(=y_|350ejt zrPJ2gj4JLxW>VwU-f`S9S{B32mfUvD&|y2J4Kg1$=tVT3cFTdSoP%g@Y^&=CKC9}2 zVz(&?lfCRpv$zzXfzlwXnII8En>hT% zQl7}5R(pT&7Wb1_Dg|2~$8Li@0hGLg>0ui=(4@DEU`oZL!W_R8!h$9rr;s;9?=>Rh z5N{}B>uQmN5WMn2zCHlL7v7CLcTU!^lsZ?`qko54waD_jFK6QG8FrDzhj+#e2chV8 zXl8~)uz509x2g6^JNO5TSn(HaA0Aq|;kZ1MIz#sOABbL(E;p5RUPd_IJDF7sQP=S&AEJ0D$IC9r9ln8VUbaXq47> zw{>>J<%$%29dv_7!+ApHq{J^wW!{@)1Y^&S2%odEzS zYQi-L2k8H)^6s@piu`Z+{$2@{cQ7_Fb}+UvGoQ0xHwrym;&;qPZE}(Ph-#qHc)Z1 zJ*P(w=73ABlTj~QVCQt%evSZ-TJ~)gc98EVy|RnBUal}L@i_NR=JOB1VILk*AH5a^ zZMsMnXE~c?eplOW%#J_P_y4y`!1&YqS25So(AL42+0@S5@iF5*Yir}VASGoEIeZ%Qc5&wO?JuC0UmfFdhE}|z!KZgs3%!QA z3)*xya-_g@H@WS=bI7OZC38+>f~FP2&8<)D*q3uUmo!ECS+adJ7w4aIxSM}yxY%vP zx0x=m8h9ksq%oUyCM-twIm6QGb(4gI zg(~6RtF2oZ7wfn01T@w~CyEf>z(-)Rk|X|Rr~1~G-HPRZwjc%IaS?=J6~>sr9ZgSZ zloApME!@12pOE)ccS(|F?b_F^0r67jN8QsEsLo`OKX8QD!tbNDh!v=3ZCS&ArJMfyKi66 zh7ioobYn3fe*r7snc_2hR`c0sBr9s@1AqS$+NMzD4-1KbVXOtL>1yLM!R(zr{-&E} z`{E5OC0W{0m1EIaP|5l@dJb0=8M+qG8NR=dAeyF~kP8dm*566^b}n~EkD9!`Vwo?a zy}M?==P%W!&lQ3Yskt?;S`LnOd*$0v>JYaA9nYP0(M(H*c?~l9pnqx^f4oJX|B|?$ zJdZ@Tab)hHSWb(ztpS}iE`2ZljgN9xIvCk=HHt-nq2`78MxcIy0VCP}+UYAC0VM@D zO$p1`KzLEtq0oWXnci2>8&&wyl$R~u6uYcOhJEn4Qrf149`a;$oj$()LqO{uS~|Bi zz83DPXmF@FbW&8M!B$(hAbwWZbnt(9-!O^67aVRij!>=*!)E=g>e%>& zR7?T?QIpnSZ@4VbVa|!PTh|T}fNlx-0ldS{KA`~j)1Tw4lb&pG%3$n+Iwrbu5QGal zaezQNFA@c92qmMcMy1vxa`@2R-bK24&+!Q1i;%3#8i`hns$S3tad6LmMEP`&QaLrH zL{k{Fe`6=zeT#(#6J+?|i)85pz%A_=;&W0mX z{PEc3LFrHKrb(YQMZL1)omOvdJ7>D6=_^&h(rbv5W=k&xDzniGMNoGG)Gk%L&yQTD zok=EZosyl+F2FD%f)cCWsV+94;)zHMBUZ7e4Q4I5bw6?X?Om{2ipXvz3%)JU&enRv z99!#CB*=h9-Ge%&Bt+GI`QFdF#$eNco@Hdj_e}tb^+F|v2l`YV6}-rioEa}RYow$j zL3b42%>=$_MN1c2$0|p`JJVTZ`6I$2J0A>O-uR>V4RQW#x(ReSk#^k z`Br;~(kXVyGi77MyB$_*bkf_S;&-y}edRYQ=lwEIQ&{yrsYVEXDftuZ#r8Ea7Gb@Fs*2cJ+Ekin`EV;H4?Vz#L4OrJuU+(gMh4`wgduk)k9Wcn^rfS)38js zU%MtIRDCluTcnHXN%$+gg1F^6DD$AO!kK@3?&gOxqzNRo@6%>;VCKz!x12Z(R6?~g&%{zjdxkebK#Or1Hs?%eJpYBIAPEu52U5LS@qMSVR&@X0_` zJMSZ`H%#S*-#SdFmGI+xk|_J9L-HCdQh-vX<6>%$7gT^lRm-=A^BN_maGs#=uK)V6oy25WeGjL7Wr39u2=7pLVvZ9+?3CHD$ChVEPi}01eeK+oCIasBxAUIlxFC z9L@dfM`etyY>e$Myu#T|T+uAgyQP(bv(DqjH9THY-t|@H_?1zSZ3@x=u|11wdt)&( zNG9{+=9Ow??dnM@PaFi4!b;Fo_XE(Bt;31fu=^R6NpEeLqYP<$J7)!Nq>FbVnbaP{ z!ijkX-GyyDR2@le0GoP5&o1;qKFF_B0S=BAIS^ixnEKRN+b)hL^dVTG`s@TfHwj;> z&JH)?Ge{|**6oZdkRzQQ&5j)L!HG6yiQdGP61G?GGxgH_wogk++`)Y2o#g*A&t z*@4j#oS63rYcA6(hRxbqBtgPWmyE3dheQcFF0Uz_Ko7fvBLBsTEQG4(j$5|-ma~eL^EfsAw#udhjH>aVS!KPLqN#Ls*ctf zB`mDZXf7S4D%Br+BS05!bkKwpk*TN4h7L_VBP7_zca)Lf>nQKLIOhr8w_;L~>QlvhMrfs=NfNR& z{0_^fCDCEU7ZB@!4{v;9ea707psjWGc+lq#`r%o{4?A3wFDhSAyhkqitoBvskK6L6!FH$umVfspu3r z2;lSHXTV9v)(nVUbBZbamQDfL@W`D?icTJ2)O;%qEH8SOGp6)ae!oP#_(7R!#+x4F z=n#YZMI1fq&id{{(AB<)w=d6}=DNm9iMsAbv&Pe{TBQCVp!jZj@edt>5^u5kYJvjR zs^Vd;_YgK=UD~YAHrodpQ3<|$vrKK7L#3S2E@RGL%X6WPt(5}00*X~{jx?6Pwkq2L z;A@vkAGz5pYiwv0Rh%y;wGOR!BxUYsjkM?H)X0w8y$tkSNhnUn)M!qwt?p^fUHNP4 z+sd=7BTJ?;qYIwZaVn=wG)^I_0DI+d$e$I z0sx5!|1QOU`zN1O{iLWQAt%c|&kg{DU^ZXA`O^mTpII;z5b)+-Z+-X^@&{;u7oped zUsWT zKd$GWM6XWe)up^H>($@fr#_~TtaphR3~aG{ya7$rf)1YNkHRD>p0nm$5YRysi!-Ez%Is}knTY~m)d97LSii#T z#_CVQD|jbRUw|38y_``Ri4u%CYN^&;i*90uns$@Bd2l5v8 z?*`;?L1?dQ+?YJ5O@d)R4r;ckD)bPP2V8kXl4M-L6?>rARlJvlKO8)TgeqPA!BE>B zi(W#eE{{gUz)V047BGLxTv8?KIAs3V35VX;8Ih#gWc`WH+#*zN>CS)=dQZ=&PUDkk zp38hEWOK-J?88*Vg8|lUV~@Y;wT`p=?;pRw`tQki{|;6#}>v<9ERgi>|kRl=mmL_&sn(4$uEs7dIKw>7=JAU_nor{^B3)7eXm<0{^jQzic{n7nrmZ+7Tk&~yY zi>Ixbv!$7t%XeKldwfl|8appZT{e~z||kN zOrVziRsfI?yypf*E8> zAF#V(vFd%SR-Z#}E7PHV??||QpW_@At19H-e2fvHA+vJ_y2UN06x6a0SsB!Snlv$` zAeqyN7yqp}Z$Ret(%t`MA#DI{)p18E=yj2dW5{t$>(tb4r#0f9eqv=Tu4ta#v54J) zZR=9Xy$@xKG>l-s8f;QG`&E?Y=29X03SImcZ4WZ*^~Xf_z-Mh4)6_ z2bau?-x0U-ASB}UTi4l91!7SEhGf>U81C#Q^) zi4qsWFf?BLZ)X;~Pt)*g^Fyd+yIrl+{VU>g)KJsvx5i~%sd1aF+tc89MxOD89KDwt zb0eyoaBn|x-Zvzf*WXlzxb@<6zhBt194F+w^{~*0o?g>({I+6m#3njAU{#5TYP}-7 zXJ8Nu6#?d8QTipRB|>U{+_L#3{2xuj9)gUTTzNq!d*Y7b1YNTSdV^d_I3qgd${Fm2 z93k-pT%dOTa)Wy}fchgVM=9&h+hZ7f$c$ToU%qx+`)b9Q2Y#irr zy1duoH|#OJhU92iJDR7lDrmT)0F5cUFvZi7hiN!&pQXr-SI47!1tN3=;dOtOXfP-7 znG@nASgF6or<4w5m8{Lu+>wpW9RhT!bOg$V02_j*Qu2H_A8(*nm)MU>OIL9J<)DtO zLlt`t;)e!>>tx4lJl+x8pjL$V4DYv>!Z8*hxZ!ALMd7~4fFN|A9M{d=w8@oteDP(! zM0209@>OAD#w!oYg*@&@lDt7+f>7i7FHMj6(|eMzLU_>-!VZPl?cg~g-@CtY$>pfw zTm;sEqi)?bRYX^26=i z$}CV3Ms*3iQ+V=5x88O$HV5l#sqL{;{@ovckC%Zd$UP{3HP_r1&XrfJE`zypvB=1n zDGuW}>U!Pp>R_gl$sn!$E#fZga7c`o7#s(p-AOk9e{vMYqF)T&o1L|Vy`6kPfaJP0@58pH{vlHs~l`Z2sWGs__3ub#5 zoB!QHCBl^0zD@0rCC(iLkvj2>E3kMQq!H_R$UK{%HCIS6qc>f!tZNeblu>dTbcH?8 zt}vPwXPs)SH5lbMuvgnow6A?4u+GL}Wt5sIqcg1&wP1!$~8)SZzjc)caGdJltuivBp?u3JfyDcdY~%3oygnH0{tQW z%01E?EZ_*u&a!JgbRghx*HO?z7Kvqh<*9l;ct#2oQ(77~ZZicP9x>~o@n+u8K*Zk7 z)O;K7-K$yUkTo4YYy~8=WIa5{5u2sh9I!l<=IYlZ#kOZ{o6C zh2}s-i%xOE_w8}NwwBfh1bWKsHbFkv<-qF_#=A(N+ic$ut=0@jwRZ}&Q3u4r>j#Es zNe<)7ksk(gI`$787vteWb1qQ(&=aY6a8?UvUSI<@!5}2lTL^zT?R?9tD*au+4PtDZ zYND^!J4k-P*t^Lh)2;dF^DoED>8diJw(C(iibGE1kco%S5pF5ao#F!~<1$(V=!0{MdkN)HsNFjNhF#DB$aD zUaO|^CA;h?7s4G-Z45Cl{>8T=D*p#B1DeFQQ4!FDv&;Io z_>NTGh(QiCnRY#9AX7}+RDVI?fVSItS-Q2@u9?LWrDi~)=uzT!JgewgIxOa!rUtpN zFXeBf-V|P}LZp7iS}OBzH2m9RyR^-%jt&pg(`U0ecGs|zqq*^AE7-aFyUP=3 zui-|bSTDlSw9o5%P88jhKNLA(xRoX%3R9N2nDla%Byu*arl*%|gx2jb>DXZXZnT@^ zlDnqXM4RXLqJglo_iCxsG1*S&DWfwJ<-Yc~LP1EJNseXH{fI5qqc@^i#&AITI?^Wq zxAFxW+bo6{Uu369wNXD((bTFXA26lBBVW*z;!hRxWrklKohTh(r!`LK?I94~`u4ew zNk79wlLN`R(9Hk_QwZlV!C>iiT6S87003=Wg znbi*YERKzUd+nj!{ba<`zw7ORXkoz~H|j42Ms1Gk7Mc^pgpmE0*o+c5Pq^?zLX6mx zIlTBXuWM?#t+YYG`#tzG9}tXG!|^A7#=WOIab+|n43g-6LrN&>OlAOkBTLz>pIf}` z6O1tFrJJfCzz1=-i5O0sFuTK4y>5NoCkZ*M1Z#Q+8Jh*@3LU6J>5zgiCj-* zkjijvNYoHmO;OJmNFqj_*Nr$$Gb!ld2nG}tGhz~e&7udgzO zR5#m1YrS!8O}Y|8`a1}~Z!^PzBNyoABiqptvs}6}B&uNSuJ5W(%zi7mJV24d;aU0c zNNrZnQOcDhKa)J#T4$TutcHZJvhD`QwA5eq2suBAqR6~n z7hehRyniwxmVImC`4t%Q9?drTX6hUAx}UQeQz9vf8c`b%5tkUSE6#PohvCxjzlw;4HLz4Y6ai6UV2JqE$B}u3b(V#y(9{?igH#zc zu7hxL1_86)nRf$1sjcv18**qv!%Y*=6Uc?OU?|a#n#`eH8)6P`leiCBE%($n{Qg>> zDzi{)Qjrd%ut6<9BU;s*j4`l-*LO(B74Yw}B*)sO&)F>;DX*l z8#IKm8UKTf^1DL*ViW}k@{W-%lgv640^J6@ujdi8!{@1pLHJWB>YIi9YP?z9)oR5m zlVwU3EI!H0uylC_MEzMm87v6{;^H{b{nh{V)&>Ry3J_92(=h4p@8zM(btHudEs2Ft zPauZ|AP845XQTD_2J9`7V69d{60RH%Hq|4<$)NO1paIdRc)MhXQ9aZLA$5Fv>kHglJrg1bqGE(4uEvMgc`R>5-)w`NzRpdGUMbc;<3i`VOhl#WrMI}x9XkhvI zQIYkfi)(TKw%mc6h{F!o!U@YjWFDioE~LDTI@FBrxhwhaXvYY7HF0V97!K#C;;tAr(_a1-Ch+K)wg|Cob`yVgCnLj zJ3X}1o{bs#GaET#n2eS3xWH2~u=FOZb)s9{?;ez;F<36mbQ$G1h7^!cHjY73Mx4QR zCD6RzrDavmMwl!dE^L*+@-z0@;C3X{GZJs(j;o_OI2t><*#vGCN9m5x<}27EP8R03 zD67EC-B|85rE9y^0NQQq;wy)SX0p4kFWFynH#9)((Y3DJV|dDa(1f^FZll*q!HtXQ z3m(f5(F$9G@-NZdjMJ1nc{4eSU+)rS_T){((a6qXxZ_Q>G5f8`Uu9VV->?3C zDv_yVaD_mo=VJ=`7`$bVIkmlo1pH)1<|=usmc+NRKw;Z4j>Z`>9q~h~?CSx7Eh(0G z5wxW5O_Dtp3|$Q3&T92~5%Qarzp889-bF-E$h1j}Q5bNzdvrJr=<{3tX3;Oi(7MG` z$X{TtXJA=cskRrhgE3ejKTe<`>NqVrBp&^My{<)f+s0D2 zhM}cJ!|frJ9cBxuL0q9ERz?ZVt)|{M-{7lM0mIL&s1RhZzaU$B{6fku0Vh80NYLnN zWsS?-GmiqhA$odr$9@px=$VqqhRbUv#VIEN{F$e7+m!%g;ao$TDch2hHY0)0fPn^D zP?=qM!f1rAeB`4~cFLYY@wJ0aH#dk{QCiOR=ui_Tlezy_Y(QRb;0!3SJ;&t&Tufb< zB-x1(T8eRnU<;6PGSeg9Xg6l&MJedFWja(qxj6Xr)+yD|BI4^zQ~nBbwQeSM^KBS| zZ$O0|15RnYuK8aciNhfte1GKQ8j?-3aCM5D5tmNcY1YN9P33tU?9P>Y67atsKm-9s!%H5_WvfnrF<@#W`>-Gbs*f2ap7{c0BP+Dp-#k_3H>H!|E(85o%4pm0Q7_hU z8)GYxQB+Z_9UwRclevVgG5d-GXQ#)0H(M|O*F;GP%J?5pxc_uNWeGp`jkFRfIu{g9 zyU7UTo{!%U4$ArPoiD*9W1?CZ7#&&`EzEAEY1xFvUDbr7xJnxAVpGrif6v{JVr61# zRJ5|XOM&T}!5VqS3kPrb0(m;KBFrW(dH-wylSCVhd8T2dW}Q1C-rYA_7epDXjIPED z*+pZ-Dtjq|&T5_73sOlciP zm{(i^qQp93Ml?{6WqZzVcIHpP8g8q4ofF2P69{|AL^F(SX1wMphu=%2cdd$Mt(p-S zZerwof`mfpMrmhENTFG;+!u_Lxv8!$x$Yz*_qbMr=pNaFZrSqBsPqP;qPKMgP|*N<&ThdF{%MJ9JPXV zhGXveYITD{O$qqZXJ?a_t)E0BIb3GZX0zDg@LwB96H){Y+`-MODxWOAkK{WQN_tX` zNJTQ-{ItVw-A3_fyo9Z`4BpD#GVUE|KH}sc@_nzGD!US`Ni2EEmm~AVaMBRt5{<9w za1BL|_r%bFpn0JKZSXF$GQr^6qin6KFKIqzt(*+eJ0$tqQWqN}i@jY*pJPndqXM9v zK{5Q9cbfxBXmOrOrNx1{d%qbDadC5Q+y;>(dy|&rSiXbPLeEPwPvH~+T6~Y>b5M73 zJQ}9zdp-PW4sof?5Vo9s=;Hd~mX>$b11*_Ka#z#pWuU9S{hPCjV#ji1#n(QQpYY-qqy;M4DS!xH=iRSlQc|7#bRym_EGcfj|TJW(SVoKc;`) z|Fa;@zX*OYa{8}w#sE-BbMD{JfT0$3(obrN@c-5OS2p^^$;{l$$;{5g%$d>J+1~D3 zOc!h~GxFg2?jC$Ov?%A{7FhVRb}dKzj;M2t^zU}>0YpT*^|qyV5%+Jb%Q&p+MV&MS|_)Gs!e1syVAY-XZ| zp3@`?hxWHOOLnE*?(kgS;T{jm&o&pApwy3?2)aM=5B&e`0rg|_AHM5sV((ydszNauqNi(i=N7UUQywD-Q15w;x7P-X}eSZb>}t_ zy=dgYAHm2!P^Z(t6!J!$pV(J#-tWAv6Y}P6<%a~VqR#ogiJlg)v7VMD-K`K2-7fjh z>b@SgXVKkVr)bW%`;y2S_6WRM83(r946V2vLQhb-lGh{Ph*|J{zoQ;YTIPK#^N5Ux zpK!#{<8t#5`Bh*u;Zx<{3$-vtYbo*9fghWfF=QQTwz+KWeNE?V6dw^*%??F}WT!~osT&dh1c{zP1=?-ZDU(x4j**>YjN&To zj`|XdttG#6L5Tay7s;U60 zXG6ZTxjMn7+qY=!)JO0m*5EMJ#NGU#08#Qe~==Tk3&E-loF(&eJ;R zt)<)Gt)-Vo4Mi7MoFS)sPurG1#~;OKyr~W4C>2@Na;qw2>>Mf(PnHx~z8bGZ^eFQR zYh4^Qr7H_hfp7Woyn)+ye!#e0Tk75|wI{W)I|&q#Jb;p-sY3WsCNy<827K~ZIr3-y zX5I3%SjTT^A8&m-x#7=!h$FYcllyxDz%#n7@lF>VKq#Wpa|$`b4Dsl3&aFm@YWfqr zL1-G8I=vTvLh`((4g9s*aQb07`BZ`+eKX|{flzpMjA z`C^LKy0DD}nzP3vQoS?eQ~R0UT;Y49-g^m|-}8~yHBCs*-yEZ6RZXAuc~-?n#TrIP z_o}yM#r@Ooa7&B26ndTtXwB2?jrogGV<@RVm>l$x6RrIsja%j%NHXLJnGxONzvltn zQTz~mWEq?UxP1F|O^oOvgV-JQgw$^jmi7}u%y1Cb7>4F4B*^rcg9Pv!O(3(0%>~7d zBg|RJytR3ZlvGR5pAW`zypx2{st!+AN~0k*Sxj{YdmHi~;c3A}5iqt|tKYEV-i&6i zBaD{k+KSG)-3yX)?jY-)%!`A#!KI9BjbO{z^ZgcmFAa3vaFU3Tq#aL5W*hIU>i9Z3;~^%zBw zJSHaU1_=i%`&lT@U8~IJYTL1|=)^H=B_czK8BW!SpRlx`ngmP>Oa#UCa(-Q@HX66d zXux2nJvxGRG?2V|8*vPC=?}s9PLhjwvkr%(k?wZZ7|-YYAYivHgcCQXqnV~Ds(nSp z%a!Cpo{gB(3KfXED5NB+pvW~#Z zD<81P?Uw!{%L$_Ytu$Rj`ELd2h? zYBuRI2+D{6L1@+ZtvLNcujh;Ieyl)oOq< zs&O)jNzANJ*A(v0<;|HB7fPfQb!U zT)KNz1e*bi7pdX}VF5tHrYE8|{TU zqQ>*sSTQvhHF!Q`0t-ftSzJPBt3(GdA|F-Md{h;@ zSu%8NAb!zT<@0bE$ zTF1hfm&=UtqPtQzl9(vhR+rEamFQfHCAFX~PA`fNSvl%JagfZ&v>x4CIf{u+i}HY+ z(Lwln7*xxwM0X9ZNzqWe##qWZG2v0II;H%99W z5E18SAkBFbpsW_+u9Tdp+zD4q4yXQE zD=MDiyQ`-|Az6u1KiVlkO8C>BD@`ND((#@r!Iy&c_es{eh)%QyN#aN+ZbI8h*1QtR zWH0GUj261Bdg;0W5DXW;`RP6>L?{C_E%q<5Ot@|cimnS%?#K<&g1Bz4UINq4uNy@J z^b&3yD}_;~j|sl0*jWL!aappv>Tm=*-`(do`COnnDR_JJj=t=ncfPCIx`&KaV+Q`> zdoZB&>B8WIZNTpvQt%DTf%D+?#|nPPa7aom+?U~L94_T9a{r5k3P0MtwfsEv9# zh%bGGs3?ye9^fWbPbC9!bL6i;&`o|-Pez{!$B_;?19b=Way3eCJJ$lU)7sFJaovn) z>XKE{6*xTOTib{aLLzTyyC`n%@=657qk*$sl&?mH>z>9DcN7{`WjLHt}IR>*Ey zzIo$gmetpw<3DR+Ihb-n1h+#(*%Fpg`ush3c<+5Q!`hMegYXgD4Rj9Ezh^L%{T)Cf zK^hs&=8DSgEncorrbdsgLJg@tZ|>YJlR}LdIAjT>TV9h18ofA?k-n|U<4CNu@o$BCd;BG<6?CNx{`lP%Bz*EHz( zc=ANWdsoz$Tk1=af#Of2w-wWx^U%Jjay~PDTm7$ zhOkpoQ@c}w%fmN^@HqSi!%^9x1sf+#p?+NtaRZMefz;z~-VEK{noy@83d|#lx9WEy z7n3#Jr^G`2HqE&e0~r}8SrI+#{{3Euc2%PmA8(_0S?D0z6m&={vfeK(ng$f`wsS2K z24A}bYT080jpOVqHN4LM@vDQceAxH33oZUJ&sea1j@xep z(a%(zn_YwNQN;xj?;MDRZ-mjoH?cyx>~Tnkr0qt*0bkz zPI^SM=%A9*IVS2ghT5dCZ&ILmLx%3Lz+@B{Tl^p~SNP%)iT@n}`6{eIu{^~M+3o`W zAlpDo>%Wa{O9-1>LG#f#nPM6CFsyTgNBqN5rpI3I2=8`;ZQ76KPKTuZv-B^Q0U`Z} zJXwX=?&c|F%4pedUeAMXf0g+w%ZfZYRGFziax%GdEP9E#8v2v$in}X>y_?1c8X9v& zRCi_nyxAl9=w9}c;_bm~(~;!4ex>316-7=~Y=2x5Na13d!)^)=KY1^P+tgknoZ^lv z$oL`m6Cni-n{#t}H6(8L7c@4fbUj7!Fff5Xt2y_8QhNYACx4o zQrNRqbQJ(jc+EBKNL+r3>{WX0ssk-J$mXx){}=B+dnM|XcVbpA7; zoFy5>x|N@jW98G1(6|Q5z-kqjm-|2+80Uj)@~O1j&Gi%|LrUxc3o=#7yxH zuNR3TD3p-Y`ymn)BnEdEh4UZ32}vn=X)PC68y}7;p80ncF1@_A>~M=79FJG>f^_l@ z_B_hBVn9xEFbjVZJWz^i`| z`Y-tN-(^1O;U_ul{<#0&U5R4+XFmTGb>008(jpS}MD1)x6T literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/fingering.gpx b/test-data/visual-tests/effects-and-annotations/fingering.gpx deleted file mode 100644 index 9041e12185d440db6780b1966dd775465d9da880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24150 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 diff --git a/test-data/visual-tests/effects-and-annotations/let-ring.gp b/test-data/visual-tests/effects-and-annotations/let-ring.gp new file mode 100644 index 0000000000000000000000000000000000000000..3fae1dd272dbb37897eaeafec7fe013330774197 GIT binary patch literal 9079 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 G0Q^7c_ka!n literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/let-ring.gp5 b/test-data/visual-tests/effects-and-annotations/let-ring.gp5 deleted file mode 100644 index effe6ab03eb97b3e0b2d46b17324f2dbacdcb42a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1639 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 Ml-av@&)lQcvp)WEUAexx8@FQY4 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 E0P`-W&Hw-a diff --git a/test-data/visual-tests/effects-and-annotations/pick-stroke.gp b/test-data/visual-tests/effects-and-annotations/pick-stroke.gp new file mode 100644 index 0000000000000000000000000000000000000000..47af0594ac21a8330078efec8265a39432254581 GIT binary patch literal 8920 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 G0Q?7rhc^2F literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/pick-stroke.gp5 b/test-data/visual-tests/effects-and-annotations/pick-stroke.gp5 deleted file mode 100644 index 31b1503c9a21dd8e9d3ae06b7f375c35faa96cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 zcmeHHO;5r=5Z#t41qJn>!GmTmYxIDM33~7XRD>o}ntp`nt=lFu?31v#e10e{oY+jnbOv;4Ykp< z*eOKH)xm%o7zwDs1MZKxON&$;hTI=IVc#1%13Jq#d3WShtz~@R3Q_|9MTFzvn)cd`o tF4iYWd6>!~?v=(1=nJp>kJgEhr-DclV!a;~NI?N4w*77a%&7ngc?NdlmfrvX diff --git a/test-data/visual-tests/effects-and-annotations/slides.gp b/test-data/visual-tests/effects-and-annotations/slides.gp new file mode 100644 index 0000000000000000000000000000000000000000..dc66d41d0528a6a121577544832111365d57f669 GIT binary patch literal 9059 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 z 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/slides.gp5 b/test-data/visual-tests/effects-and-annotations/slides.gp5 deleted file mode 100644 index 66990805c7b837cdfe2b01ddf1b0ee1d30425afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 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 diff --git a/test-data/visual-tests/effects-and-annotations/tempo.gp b/test-data/visual-tests/effects-and-annotations/tempo.gp new file mode 100644 index 0000000000000000000000000000000000000000..aa13f8c325280bd7172f794f33d67d220460d2f7 GIT binary patch literal 8774 zcmaJ{1yCGYn;iys7~EZg4i*R=AhdwGMII_wY=>+xSmEM#BaI zagp7JYuk|uTMpbk-py)cm0EuiVtx*ULkgk{Z%2t|;gku4t0B-a$;OOJ^x_$dx+RT2;^!3{^{cIbB zge0_i#11J8hMH9cQj3)zT{20xuEH(IJg&F@Rn7V(yzC;lHLFccanH z628p)9-uXr(51exzh0S z85ah$H8*=h?Tj!xCttGvl;!fP4?^qhXvz8UnPk-@Tw_%{K{@WS&!1+x_G$f*!_VFxQ3iw27gX())!1h!*{Fc+9)z!_ zpU(s{oK`BcxxXCF%`Z??{B|?O^6sG-$j&7>b-d%CO(tCyQZi2UTr(k7TKjdQgH`3@ z4+QYSB*}U`kl(yNeGUv2mcbCaPTDMwNWA7`c6l~WgMxVCZ~?Ezn}1UH)il4l*$k^- z(^jFgZK$bjZf3+ct|5z)?mUr-AzbS!DNjFh19rsei{O#}e9BiMi-6(2yf((P^Z4qu z%7+%^ED?dc}F&8b10yGl&f2tL?ihA||?m1wS?He;+tW2y2V2 z0pz_d2v9lOR^l-L|`ez5UdN4Q7%UPOf160%E6Uc^^v@o$F2uY;v2)k@&%7g zV_f2o4i6D#)UPHoUPHV`HthmoBfma}Q0_G;9rZoc;1m>9?!@6h!G)On6g5Ha1k97b z<$9pL6mx0$t+4SJU3oPdQ|2~3ciRCAO6xahR?-~J^v#qOwK{P-`Cg&V+Dfnqi9{z$ z=Br>^4@$f7)X%ZRG30Q|xy)Tbl^N`2Z2DFj&wX151Mhi z7$Ak}lj4dkKv};B{m3Juno!-_D-$z&LVSdeH^5Y=aGM4JwU;&mdMXP<2vc~FJ+JM| z$>9~^sXJ>3Xw@BZC6bQ~TZTa>T8#}l1Di>Yk_z{K7ow-xC=9~TIU5TX!#}a;m}k(| z8@nh0$?Sr(nIqZ#?zU5^Dqs1+AWc|ZmB;cf zU&i{h2Y;o|2tc!Byy!%{FIchl?Br5ZO~;#+^6+=M1J1YZj9k^vH^*fT2o*hs?2DU? z*&6pX5j6RQOvhn%J{1{_a{}K zcGl9v{N~bmpwugIq52(ocP0{i&eRcHR$) zRomp1A~fVhBR`YNxo6?**?^U(hAEk@vduP2jS`JI_t_G?$zgsw9^$Z33#lt#5lN~z z;bHd(O;&XkOWyQ0#T@P_p_CXIR%Y(fz~Rubk_SiPlb~&njWcCtjQh3n*QUq{k&JLA ztC5?g#ld+@TwMA*g!#&-OguE!+UtTyHzwLd?-BOJ=d?#ra0onogfa60p((<5TZzNY z#gj)p_OAFF`qK}E*gxRkDL!~^g?W?QAli7%*8|XsBS6*I+Y3ZlBe4?OED8d*1q-d` znXtcD=m>cU$z#;WXbtX{JdW7zcEit}NT4R}H@){}?E}cxz#T*IP*hq%RNAsQDk)vW z;mlHeQj2mDbQ0AxJM2O-%NOHkQgQt3v))+KVH%To8*A_y_Qw*^oPqAHv90c|k=8w@ zw#|M(K(B!GEnvo8wC3GH{dxS>QHe(f^h?o^ zJyTbNUw$kDxIZHEQs69Rtwd*RVw1VYOZ0en(>daN*`~eV!$L2o(;}qTJXk<)HuWkS zzwk6ya-<|qIty+*`pR!Aq;!$=u|0yRIG86{PYEs_`aTxhxvznBk-OS zFx1c>?<%x%8&_@}j#_z3IFyd)SVyIwSW9auxzjsLyTr!o$}&T1qV>54m|GHMt)+Q| zG6-3>$PezDYhxo#gI8sHUMAZ``6;D^clZ2^`dZV{A#R^)!6R~d2yq4kk+e|9%W}7B{gm(ljU3Y7Qwv(>u^dAD7V{a; zb*uK->6rzpN(@|)}b-tj0mC-2m08B>Gi*bb?mNOL5( zTDkyiG51=7y@#~>oTO#?-WGpxCPn5=#&7;3NO)(Hyp_Au$*GW{>?HB$r(khXw#`3^r2xuE=mY%UQD)lu<(Za0|E!g_e&K z&p&IDW#r@t3CxWK;iw8OC;i-(Py4RB;0g8?Etw1A2 z^YA0>bil5tEoX*Gj|~p)Yt{rSeQ&^`4wQELa$ta4hkyuYLT7_wWyYGRoj{avtdqsq zHw9iy(&NgR4HCeZ9;8;wtCQFu-eb8NruS99p3Q+pWwOw)h5ZT9*e7_>?A6>J!T>F~ zV(TT}q9K$}py;BF7210jQ$A}BZ`|*3Un4LBf7Mw<#YbsPuk7K(a5>p}M{Lg%qV3c8 z;pfIHn0-?OP=aV?I*T@qd;rT5Zx)5#;M_{F9D{N};wn-3Js`7dp3GGGlKKF-wIZnG zWIx~f%*+oL7Cvgv{e!ug$MhkG2I{=k`6%CsJ-XGPD=fckC#dN;r%=QJ_kBYZ{3CXu zPPo1uL?K%cqpZT$Q_e|WLX+^E`+!ckp>{2jldDkO8bDR?Y-hp&*eWhC^O(7mlg1jD>ct}@5!q>%h80^sC~i=z zB?9XQGSWBO3_EHexeo|UsAyr#TlN&DqK>lyf^eMz~a3DTLTW%48h zsSv&3q%U!$0vkwCcX!)V_P+w9a_Ix+QxidaXD;7OmG+KgC?z8~Gvf9=skX@Al8dGoDfSrQeaG>qI%||p!A79uQv8ndG@gp7^=IA% z{cNvIW9pXMH9@U1_j(d}uI1WV>Q$XS4tWd`e^pTVY1eyuUjHxO@dLls=3%qvjkd)j z9Prsw<3J>L7tSxAFgofuBfFeR%eiJ$5k>N{K=7pMjC3fV6lGl{M8!r3@ zV6MimulD`GYrQTNH>@}9tqGnpt{V)KR@7-!zf787QKr81k6TiDsBU_fDf&t(2NjxPJ^{5pk+8xz7ejHh>@M}(Y)?i**xMB2&8MncuKSVA#q-)QR zK|$qaGceWva&By3EEeoKP1RgGG(AKcYiPaU&`Bsb%YH2^%nSJo-0y ziBb6H#A5oHK+FEn{r%0BsU-~hcX^7u_C)9W;V7Xuk<4Ogt9+fAin9X)Ad#X;pf3D; z3s}2mZfgiAo58ghXj1k7uJs(p97<@6w$UBiDty%7o`BEq?&Q!L!zO$1kgeFei zK-rmBHkJ2s`1bFT)2Od zg(<;s_hkf8(fI-X68V15;ArOOVH7Zf`1GfM)>H+YTiJk3e8y&0=H>72iNtbLN|*#| zi}zCY#N^XgIn63=!IpC4c7C7umdK}jTg7`XzLVWMMIL@S(AS-S zyW!Z5SeB-w2>A+^H)&3bTSU7oxC!SSZ|>W^Bk_5wb%*^Dz9)T7zF1c`RCZ2DUFD~2 zK>W;2sLOPT?oZxf5J6cP9q0Q_t0NjsWbS-3eHyIMKen;IDz8JpccXTu-?+V8n~(f)LQDgT;~=x>C|#?Jqj z&IACIH0K*c0`xa&P`~6z(f=*q-!q}g&Jc5mGsNB$;=*R_;$UwV(}~gp#)7VH|3Vt1 zHA`d@4s6Q4dJikZ#yyYw%Fm%mrtvk#VAK)>uAYoj+l^M5iuJtBw&6_@VzksB_ zQ5&=Vt7vvNCHo~|4~OqKU4N$k;omL+^r!W&WUh;;gENH9!qLk7h{VQa>GgT5KYUr5 z-if(lZgC1;hOyK)TP+v&y!T_KmD6XUw6yDDAZ{3_iongP1HszTw-J6neG_I-O_aXi zbx5CVP3JxCEmVpa75Y8J?!c?jZen7a9Ce<3DMHT;dUTSR?8l#-Rot(uuz$E<4rA00 z|2TjJHu27?PW1-AuUe{G40QCu`t$C0eEjw?jtb*bO*dixUR%MhBotorPZB}XZ$`Yd zq{>9aeb&!YdoB`WviYxhMaUHxQW7Zweh=0t#K5MTd1-mX+Akz(b5hwnz5;naLO?SD zc$JXO%^C)4KjQh?ah&eu_u0?_-^7X5sKUkh+Bnbpm<4Y&L!%F2kBQp}P&XJ$v*9lx zV$g`F^D_2tQ?s>(PJ?>y8HTD^?}Piq#s<^)&qy)orS6KSkZ}(Tx|jKvO;Pj3sE?qR>0s0@I3T)_Az%pjYcF-cON|$LIG)crj(Y-Zgj$2qv;x zv}fBy3+EF2u+mv4N9CM_15Dzd&sQ@MU5>dt4%+Da#ncu-EfTxh1@@nf?-Sa$<1_g6 zKkMxnG1Ey<1E--W98MxedC^Miu2ceZtOF-F%IJffYd|sUYO$RJ1Z+fa+r~pKd{vMD z^9HK6ElR_o_-*i8Og!*TPzg35u~GM0x9OgxTas!WVGb=wN3<@aKhx!up1MSFy#|#} zh1)ZR)4Qt}@WU8Vl3jDWLNlLLY5j0tZhfj#wvX;!K2%=%VB(ayglr(C#k?>3vHS6= zO`s*+p2~#70|d&hQp<_4SsshP!m0tE_F>HglAsL-&R^90ChhWpJE7{B>~v;o>n+vU zpT4TX=R6|}i{gw)Au#$y{6!E<(~&+3?g$znuuJuM_&6&ROn5tC5UQ}M@GIM`qO5UQ z35Y_l{04ccfhhYV=9qAw3NwrCSL9Ra(j)65_jW}FK3i>bJAqBzQ+xwD39(-;Iai~v znop1pdKwOQm*D$!jp{{Z{^LAV!w=Vysf7Zp`tn`mNc$w@!%Uw&I}}rWE6cdNc=1Jj zF;uMiW;83`66U%BAUjGFd?%tiy{`m^2AzZ6oPE5IP^CL5N4Lzj)oC&)-l7&d2+WDL zTX2B$Bb&-cM;6~7w`z;$xMcE3f9uY5ak?g}tHVPd=;HepLSGv4b%s~b_?dPL@^$2$ zkO`$<4kx{{NT3U?jyFZmXdeU1KDPBZ>vVCY#g?L!Wpsiv_$qYF-_ zV;?A!S!lkRwhWIA3{@>9FAh@Hw?e}IJDniZp%nL8`p(3=!%mN$K^b5Y7c^g zi1pfKCUT9)`(Q6L4I_+e(36)vWX)b7G=S*NGrbNqKr9@GMt0?))(cfQ$b61CbVNBN zRGg7PsJsEF^HbY>3A-aLmZM?;<}zjGquxoIA=DdUUPJVnY{whr@PIOBx;yDCj335} zwk2qcJ2PLh)4_`l>N62>VfngF#NRJ1ZMAQAyZa5?(W0ySi4XFtdg+^uc((x+6CaibOn!QN=V&2UW`I*Tbsypyw_|0X*T{Sh zBVuRdz@q05D`D0w!L@GgV`!TD%vOPD@fn!VMTGVf3i29*uu@yCn8Uhg0Mh|>EF^G( z3t$@_Mx@GX{I2iE?`VW~wbkiTWH+r^{qsfr^Npm_`|GH6;~X9CyrHI^?ToyV?2_!) z>5v2;9c$k$@$-RYReL=hY<}M=%mBVNo?RXiKSySqFK}{_;wf|VU0B?^MSI`U4|0)5 zd@{^6)^voE-h51JMTDNyU>t83?q`X&Ru`yHhHxJ-n|9BB<8TRC=fKAP zEY)Va2`SH#6fN?vV_mg0tkMi(iYTZ^#z-=xsw&wo<|>R+H!DfR(7_Jr6{S)$%FvvM zmF`tCVNzMX?X8)uE9l9fZXXT7WztcXX&ICBcARAcCEj~=m(kKZZPK%G*x(4A4ZbfP zW=NFf-p7oULO&)wU?y!k#tem4+jOzQ02eF+jnzFqbJ;TpNXi!LT4-)N zs*YP%um$JHIZTHZ%*L!` z0fmv+!^}GX^FI60k@V5!4vL{0^~^^hIeY$(Om=xP=T44FoGyW0;fn!vy)3QT1a#7V z>!DecrwT=;fxoS6!N%2;K{z47Q$HqBiL(^bh!>ypiW4FZI9bp>29!imBIU*cUmvUN zWIlv_yeo6xI|gHqnTT&lC)vZ}G-wOKB&TG3c++L5!H8GZV7*7Pa32X>-GPQ!G()Zs zG@switA>0aDu+Zr73n?r4OSj+?Z+SxX`ReFqEqzoc;n8m*t69!k=B)WbVf5(FlhL{ zDm@e`IhRv`Jj;AGjATMoDt%B@f8(pVZBaT^PTSU(fBUpMP{h20E2)Xjl3ik$;~o=R z@NA6D`lw><4L@*OLH3{t`?P}bWB~j0gz@AL`_zr`^cMDM9pmL3DRybI#$|f*RU!`o ztf4-t$uAi)W39Moqqyjx$Zx60?;BnpuQC@hE=FrLIQ>SXX0-fgE&FTTX5{G9%6NG^ z{EOXb)5PvxfW2i@mC zPl*+`~$&nwx=A=;>R`gqpk1{ zIIo_~?b{VH=_UJF8)dLqRwBGdDoxvzgGpu z`=9yz(^UME)9pa(BNMQB2$=_ABrr5hv?YRdb6`AhsI9=z9? zT?j%jAu68yl5b~s=9`(_cC*P_MJ_8vos=xa%bOD zC9K2MGs7#aP9Q%H7P&RHDD?wT7$ekF%u11NV1yc0K`djijMBVrDuzjgE?+5FD&2v= zcFpyi4tW?6TC3_ehH$FAPP5LPs%0oLJp|=}P#%$KkY@HY_j%+s8;@N=<*IhC zE2XkYFCmi6w^~HUNQdaG!@NFoNSY|^F7w)Ux9PU+7MW%ntlsmOlYq=k&2BJ4@8}uT zC_jnnI?S`XYzR?-eJ}|;7+}?N?D1ED3x?Li zk!URL2j|a&I<6N0-xV_=MGMbO^#RnSRk1VJKF$%;k;R9WXt6|I*3LTn%0_k@74_CAbLXM3Mq&CVLBQI`8Tw1jp(+)7A`y4eabA*&cdY>kGbJAv*M~Vm>k$xg6;*PjjaAR~584YhKP&mlb~O-jZwI;MZO^6}X%>5dUf_rk z3=Be99gNRa#NlK>eQyW`_TBw8SqPtH2c-b~Be}1Q3L$5&t53>9H_T+CP^cp%54SRdmq5PmRYryoz&TStgUfrH57-g_c`3;&gI?z5(Rv~$?369LkX zQ17WF+=zaoitYc{hu9ZdvDfw4V_EEebyv+-WzT5`%DR7H> z>0*;=+ep>~Cb(g2Gh1ibp-O~57)a^O(B{cdMaE1HY;nPRH~DhL zoBDa>XC_C+(ah{TY1zG#0lHf!WnX4C;i>%{8&v|)5}%ww($_UZ0=c!F8x8bwcP}7- z3o1_1^^xR8^Yq2%JHG^~@O9i~X>jZ{JL8uZ(_{z+XCxMYezakk)U&dI{$?|gI~>s-!PO zf|OjiW!9q@7*SN&^GU|FW|7?@Tu!y$JYHx8`f`;HoMqu+9a(v!YY)2mPGSO^BPszo z@AAAA&bF0*rUu%IQMzutouVUFHcivGrY*4>jg)iIyyDHN&{-oz@#Dq+xa5Xj!xf;Tu58LyGQT_g5+#9$WDWU5u}%bT1gnSp7%Kf(^q zmO!&o_P!YP`s}KUV-nJAiqfd$Bh|a_)9ryw^pHUXt|-YAb&LkWf3XcR3d8L5p7NX4 zG~R+RlTl#-b$2`5p(Lnbzyoi-;Ol3j)=Wjfj;$PC8CM)j3%l&OaK^sZ>o1*m*)+f+ z_-6MQY)nBvmio@bZD`ZR=S|3umjJT;db#7C=Ss}Hf}gvQm=M-{v;)#gKWALVao|!7 zP)Cfhxb&9aV1&A~f|((0n}(zL5QNzD3z8l;Lpgafp+=!h&_c4G@4mL;Z%FvD4U|Uj zZ|y>6Gny11K@d&?y_C(^?)Nj5#h6(qxj^I-aEH~8ZXVSK9aw~Z?b4cp{l$fH)FvEA zs`xCsVhxbj=|nkpNv*(Bc5_Wb%N!FK;^y);;>+KrghlG63Wl6Y0$~GX9wpDK+Oo2^ z_&BT2YQ3AZ1|0FFBLbJ8U<+0w{LWa7#fORbd%O5(C^z!`P&Lj*f`oBS%vxt@)wM@1 ziZCShFw_}CSUm5x6U%?ndqBaDSzHxK`x~#hjpMuLO0=6K>SLB06DrAPQ(JNZb@%&i z_mZ6(9|s>y+Vu_l+*X1`bZt?EPj{l8;9~@LtW{;nm_%u#6>wj)Nu+Bnm!1)D+~qGL z+*|yAkg9kio6}vi!9C=ySbuE;%POW|Pm8&DeZB+EHth~w)yy_TruFd^JOvzx7>`&R z^wi_ldj?EKqP0Ee=QqQ&`q7j}|889NZCA)Th(e4RYV0sy`vrO8SJvIA%xYvPDYt^| zIGjxw3hA#;gJ6&Z-T2f|D|m3ADw4K0zy!2N)y+fm(y*cZ%Je*YD96E~+;83MMc*eO zJw)we?2k3q2FEzIBgAfk@I14FMO;Ixk5<&!ru|0-M{0;i044}U0|bFJZykE$Do)#~ zXrS)F8job!MPJD8eU8q(3}^B?!6T_x$D6T{a%dSxb%$!M@0_98wrNgz<+gL?NLQ^B zRtk_27W6$0FK1r(GpD^*LTe`^+DkT@%~gt2s-35cw8sZ|Y&Z!5ht0&UJOo6^Bl!oN zgH@T770kI(nq{*%CioJ=C72jFihTyZj}$%H6P);MyKJ1vGon7MmA*4VkO`rKHe3za zG%EDZVE}`5IPr4jkr+5BE!Ed~;cpDp@ik!&L}t{75ixPUy7Qyu0=_5m-)+SXIuwo{ zciKAQZ0Jlr=D(eT`6T=Jbt}+~@CMGxb+!h8To{Z|@pgM2KYb|T<2Fd21^&Wy8~>oE zqC(Q1Z{aj5-!vGyB7`@P0%u=Mt`l2DWiGngJxI04%;X4~qB2yA?*wKSg<7hqULp3I ztefTf_sldi6D7kaGQTVl?;$RWsbSx}ydb?(HMfgg=OlTjrPlfki3(Vk=RtUEQNg}( zdpjO=Y8PjV-GsS8tkf+@J1r*Yx`NX|98QrehV8Ew-sRu${cCCJgjrPabHo-AdQXX{ zx8WeZme1{lb0Yc3{e`rM{<^^CP?bRPcl*myrwX0Kpgxr>qWg(?wetuzJ|45#)R*d2 z+igz8Iex1o+Ai5{$B~n<0^5pXCVcDdI!IS^hswDXEc6(+Di>5(M9OqZ?MbPTCaW#^ zP$O%}ZX9stP_&AKPF=se^x${jY(Y8EEyvQd5#Pjm8lrNS5`0@`*TGjHCG% zfHm5FlfT=5de3KZi5{WC3sRE16}OsscIF%~**fCUW*)%ImyABP4mKIWLl2I+(?fVG8D|t(=^j%#udl^yI zwLCNS#Cii0y6^03YV0z3#HNBYYjHlzePWAZ(eL<%N3sp0{v|74zz$2ZwjAc^ZN5g3 zj*W>-CNFA9na5WtE8%&2Q%ue)CeO5J+e6+E;nN-sk+d=|#yZ!BEBAZM8BSDAKr3d% zY1JLwyOmmr)TUDOtdJork!MGT!#0LE^z z8DL%Dpv0aF-A(3_!H^9jVg(B0uo|#ql2oZHsq<$_O?B$vsSkgy1syg}i8~b|^M^Uc zbE#Q-@DQ>`P()2}FvIY7G1Q%VRXMwt*n`^K@B*!-3_P-W^_Se{aZ`B!;)q1sLerfx1gYp?ufchOkkE>`(s9|AJN6AU580*1tZINu6dnI z*G&V8#@jVswG!tVLTT_)RTagmMh}}bDxsGmM(Jt0rY)COMi-9HkE)!vEIGr?QLu;H zwiK8qqI>h_m(QrJ)$AedpNmVuQ;Ki`Iq4WMM9Os3h!~0TT5@o*Y3$kJ%s~~la=8%| z2fCtX$h8G~eWon*s8>aKZ}F1tKO^i&Jx!Wr;>Nj+pkJ74_Ax=rCcamj*YSJbxpvnm zx?nLS)%sQKAp40mL_(zh_A(YGoM}T>>{QM`$UrTMUh(lNP4{|iY>;F|!4#r%)1qq! zBa;zcI>~u1$_bS7>o<>r@sW`D*waJJa4?7SwDnGGixsGygjaVJ$du!w_?Zd6AXnE^ ziAP7N>(F(*IteSVJ6XsO+X2f7ia{;(G_+SDnYSQKM||#s1X1 zv13Q6=o$$6V;T(ZoBx1C5|39}mX)aU@sHGzjxv4sje~HQCCj?cR|5)Up$nQdfM zubkN$07|BU7kms$9$Bltj-n03)P-4TjcnyVsc?+JBhi!99 zL#tl&uE;XG`)&kC@3!AjBOkWS4tgiTKU}R?mCTtf4)yW8VZFyj5H$^Kp$qL<4HO6xhPmkN(E4vW7rY zRgX1llZr6W!@f9+2Zl4O5RseJ^r~MJ-WEzK4>XAX8?}W;S6%Y#$at$U4ukz|7RYe# z%106QtrKcufxKa>^(P7||FKc@A$2vW(s+DjS!G69(K~Tn)3&{sm=7dS8iZA2Bx2}e z`@dOA;~3Sd@AlwuKZzw%vO_qw>kJ5>+2gB-@ar*!2?3g7Eww8u|K`P^Has&eC*uwPZo8LeWtpq1o=HS?Binr=V8 zchyr+-?7h(&$nUlJhLiNQS*j^Sn$_!LhrfJhcDT2@K#wq zOv)%(J*H&oR@2FFo$ib4`rx;MHwaa^dlZVt`d|WTV+fVr)aXm^{+(*28#T?0k>8$dujs{UJrGXj%WWT%~|{FgC(081TcqE-g|1VMs`fd>wY88Lq^~SSs{AuD*;iTWsehx;%wdMHmGi z*%UFiflZ0(6CQ5$=Ejk_ArsD!lD~+I^9pgxdre<#2Rov1L2Z-tcNvD9c@jX?APA^K z-j^Wh)7sTnHE+~4KEE6E)j}`~4vwi?{EovD7dZZ2Tkx!R>k;_T?0)luYWJ)&<54S= zRYc;_hv%N(BtAN;P6_M3PHbi}9gn$KK1F>;4*5kNz7UR0dJ;Ax?UXn}Je*JPB2)K3 z@5GYJ6hCT?X?y-|c%g>tq5828NA6pI zWr9f)WV~|NlaC{d0Mxw@F*PtTEBFNkUd4RSHM(N=?Fa1%I>U~*{^S_e;$aKmTlbAz z@QCIeiU@qA1w?tIIN19Bw z2X!E}@{kN0nsZ@E56mxDVJ8TKT4CRqrGLZrbtj6f%l`rSTYGpVVuv;M$fq^cF?M)K zYT4=cH+R(>X}OCX4;iq3J`8f$?d{SWW`F{yJ~l}P-bWPmLG5G}bu&&4tN8P32E|%} zgMZLLT+Xc;&3u_w}EjT@F)BPnm|H~x18tm!p zg;65G7%tn}vr5_tXby%i%3F2|@1I%@W=HqZU=|hdl$AlXj^U%mtD& zqFgSr+zu~)xeM1cv*~tW3Ga93p+qg48@pRowGK@~Yyl(?iYjucWD8PDoZWGAe;PQs z_-)0x8qL1ogb=+MAoDo0Y`X z!sw;aWyDeA4;a8geDZ-l#cbm6kBIO{zi6Zv4;!~AT+r)Kat&AKD2mB`rugu#of185Umz71)4g7n0!|Q>Qg+CEZ)qsiePvtZKt@ zA5krsy2N7HT8tzzc<>Xk!Q#jqtcRslTG=85p_u(xRfL(`bzZ+}+$RgUiqJ)9LwO{) z=Edy*D^23kwgoUHifOPnTJ^%#%9m7GYQfC>4HKo~-smJUE}O=Q7SLdGu`KXhH?d>C zzW8??pbC(?Y8bFtVQ4KEjl0gwc@$UB#S-h5xw6kSe@?Me#W0~u?XCxG-17u|!$i%LilE8TIS9Sw`+GK>$;%&hysS~z0!Q~V+|bZ(5GD%`gp`PKPI8u zykrQAmYdtf>W^o%`@_mJ6;1%)3*x`a;NkwHtE!(Al_cb3!GAVjKp4tNoIz5kW;%1iy%sJ~7+yh@W-S@J4RUi16E?8TSn&*NXC{(0`< zpD2IVBd;>%FMIL*^P}~@QT`uM^G~2xA@V9hUYGSMU;eTe-?hI1{U0&&PncIR@G1n_ z|Fr+TDpu_Ona@8p%s)|HIeO*im8VzX@Rz;#Ui=N^e`Lfz$G@`m%G4`kuT1`BFTOcs Z|IMqs6b$TZ2i%{l7YYEF`_lyg{09+@C`teT literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/text.gp5 b/test-data/visual-tests/effects-and-annotations/text.gp5 deleted file mode 100644 index 7bb6e45813925243960055603898c7b2cf593ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1552 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 D>y6Pf delta 8938 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/tremolo-picking.gp5 b/test-data/visual-tests/effects-and-annotations/tremolo-picking.gp5 deleted file mode 100644 index e3fdd736849ca12250be740a6c8fc7ac6b25e37b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/trill.gp5 b/test-data/visual-tests/effects-and-annotations/trill.gp5 deleted file mode 100644 index 63e48eba949d39dfb3c0dc96377583b00c2ef641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1479 zcmeHHO;5r=5Z%%W1tsc1g9puC*5CmZ6ZGJPQW2U^Y5Ec3vC<6^2{mmY@;CiMb*6=Y zCK?Xn$(OvHot-y3v+ZU}_nO+)nkH>Inyr}BFuQbGJFi|6!bBq@5Wu%h6Hp$f%2T=wCK;*X5EKWh|2hkXgXf4cwQD?@TB~id zYlzg8(TJKD38~3L9!$AMD^wdtJQ%yt&>y=ay3DqCe-d!72$?&EJK&T(unT6e diff --git a/test-data/visual-tests/effects-and-annotations/triplet-feel.gp b/test-data/visual-tests/effects-and-annotations/triplet-feel.gp new file mode 100644 index 0000000000000000000000000000000000000000..c7c261582e4bf8202562851e8a5340207a6bc2a3 GIT binary patch literal 9467 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/triplet-feel.gpx b/test-data/visual-tests/effects-and-annotations/triplet-feel.gpx deleted file mode 100644 index f07a5b72231352baa23551d3f81f11fa488b8de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16717 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 diff --git a/test-data/visual-tests/effects-and-annotations/tuning.png b/test-data/visual-tests/effects-and-annotations/tuning.png deleted file mode 100644 index b5faa2f4f42c8f819ab35acf47a4b1722145ab1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25503 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 Zb5e;Mo2^K;!Y1$qJ)`@3_G!C6{ujiudBXqz diff --git a/test-data/visual-tests/effects-and-annotations/tuplets-advanced.gp b/test-data/visual-tests/effects-and-annotations/tuplets-advanced.gp index 3b41962f3bc438ff57bafe3daf2648da2744aa45..916f4ad2d32b2874c7f43ee6212456f5aaba9312 100644 GIT binary patch delta 9458 zcmZ9QQ*@?Fw6&9T&_TzxlTN2+vb}NI<{@w9ox2Tb*zrg-Z%f*|EZf*^~^QL zx~fq%W`zEzVyq5Oq%C8Qui;j0w?-BNS}&wf_K~tuveLqh=?~2W6N-&nnG6~6M~8JA zukZX?+;;BfF1DzaRc;l>NBijy`89wzv=c5C#4P0xS%;-%!W03*?}4t*ki!&;Rm1EB z?NvfhAM>AYX_tgwni$ILRkg+3Jx{rJX}e^e-DI>gNc{%nglA>ED%&DPMBsu*jIfL|`fkmO)>ULWs5)o&cHwV>Wpmk(+e|qie=Jy0pkj16je2c;hbm0@(~Cg9RBXvt zgrMZXK3yFOMib`BO!C^KaPx2nDX=8P#dz-7lbVI6n1x;Ht~Q)!4m|$mwX1Ewyb~ z`^o635(7V^3Tz^oGl|Q}@~?=g?QmfosC-@dmlypZ0k5Zy$|5lY%>_D6bukW;cATCa)%&kAa~Kg_f;El)!HSfZy; zQSktIT~x<+$#Yh zQE)B_DKGp#h!UrTr$Y{<*32y<4(OK09^UH3>dg5)U`yOL(^7(19=>s2-C}b$7QT=G zPf*9+Y2SrFiEVmGJ%M=CpH){w))N9wZUn%;$t|7ny z=f>SW`Ju7ADO6bN%zmEkrc=ELe;5QAK-2BZ@KnBjDU2BWJqV7^BjG+jRh7v1arJmi zm1!UYk*znApcap1s)j8f*G>8}ZlULl+z&SNM(C0_i1FL1vYny|!vZlq2}GwmHv9bN z4R40yR&@?*_QlfjDpA#6S3_j4J~Ch=ClBx1;f0Aj8GnOM!7$Zh#|T$p=jcfbxyIWM z0*nJZQQGs3@af0(r~fa0DMaDN#Qn;!ghyst=TEb=Ayl>)bg=K!t(!!?b*j+{byRRgouy=aOD${RVA-ZC81uzIVKME8G!oXSY9}NK{TlYfG z1Mj+l{b)RUiG4;}`DgX#=E>6xrF3x-I{!P5Z^IDA5f4N>=&~=PzxqHED7@;L7Rui0 zM4$MAWE@ykHq)r6vE+HHsU}V4F#{qTu1$eHpHu=P1uAE5@-PW5jJ$D8XZ<5r@gW`2 zbzu4IMS#-Hp=xzTh@AwP=N^EvKuw@(mZ|kfRbf9Jqu~DIfj7TaDha`ftQ2e>;d$A+nRd-j-n2~VY&4V8 zDQ1>DDI{xE;BMN_(Nho8G`z#?Tbqi%%hV!KC(5R@nW-oh^Y&f3$Md zecuorH_-kq%!Ks&Oa{BD*TlZ9|CjK>&tT%y-wKz5A9ZL&CDq33($2kbDy?H1rafxjHX- zv>TN9J;=tL*mgQKDH=D55OO1rwkM!EgTaJeH?2fO4C06}fO-|t9~q(y`O&>A9mCn3 zY}z&of=Ky8e#-_-QMd2grF%v#wyKwBCQ{Cf$OI<`V9Zy1NCrT|50HlqT}wkihseE2 z-`02M=5p|{HQY1-?b>55II__p8{p6-+tC3xj3$zk`255De3WE+#Q}&~H&da)m{;aq z%T$^=Q+H*kQYWaIwBZcCFNY~L)!%)|)Bpqv>bq{3*P<;Ok8T!u<#dci33oro7l`Hd>u*AFcz$Wa2uzmBwL_8xJF19q77K5h7ry2>Sz)WGw#&AO# zQJjVoYk}+TdP?xWELv~GI%UozfBi3R{fw51`&gzj9xnG2Vib_FFIvtuJlWkKnGPwh zc@+-xSBSQ4lDA3_VAl+MjqaB|`EwS5t%#;Msh*1c4hyw1wFbAvGM(9RZd*3okV$ii z2Oj}(k{JGRw=i`&RV53K^bYx4);YeEC@DHxR-oK}{MS_3n*;7uz@huzjUp}L>rN%R zF|1rTHKfsY_`Y#zP(BR{i!K{>fg(H&8<~~nF7MYTBTbwi&}Sk`nv-y7SRUT|NCjZO zQutpE62_fMXD|EgTrl@^=iiD^R-nY>-#iXNyzri2tUZ?-!4OKrP-{^RS8=i?qD2ou zasbbB(Q5l`=9eQ71vUpZVU!91x!&u#`z8I$N$AZ7-jI>o)4;1q=LoD7#IZi(SVUTU zMB0W3JU&I(#lm`QVw+;(&@8-hPRN~jmJi})VrlH+r_R*xi!>UM4!WQnl)y6l+>zd% zse|60iS|>+j{RXUV1P&R8EnB$uug2X5x9*#xGXcOV@ptMgz=Al7h+v1*n9n?HuMtU zo^=gROTQPKI5l>GKJo>Pps$4Ir$Cx7S_&>$M<=sRm+7!^q%+0%(9e59h5WjoPYaXW zaR;Gt?dw#xWV5waGo>WVI`Qtk`^fIgrS#wp(!Vp3FwxG^U1Qx*-!0M^mL7j`2RI9F zr$hWgnz6iQdGyuP2z!bxU8fb>$0N3cu*cG292!V;6Y9w=#E%EY$=B)WTtExtMjAg=FgQovet#uE738y+GP8hx|+~&&}pAFk~hiu9#{MM;d{qh4YQ&%%3cD0vuI5vkZL;Z2RYPZ(V0OSm(ItO@U zboyd?(^aMM4@NtZi8jWH<3xz1bMbmYYE6Th%CkQs%Oy4V$GF9;)0`1H_-z^u1RVxC zSE+ca^+oWn*CSj}ZI31cPoD6z!4@*x0UU1m4UGG>C3bT}{rB8vx_^(|E6oVIwc4gs zhH`DjRIenN;$1A9!EBIDf%YJ;G0j0oNvT1h(rhPuSdL`O)_=Yz9E*uwiajba<9*GS zxDaoLuary)sOowLwdmHAw6)%tBt`eLzOEbBgO5E>Sf{IZfcv<(Q(ar3a}N>b zM*DM~-_<`a_xF}lXd#y&8qEn)%^=bGXw)|+X@edBRvz=4ECZGh?QgTm8^_lLrFb^Y zh`BpH;d_~&mXE)`w4~C>`N+t9)~pm=+rR7>8Rx)8p+cPObwB{Gmn}8qkoaHF5#{pV zhhmCDTI32e4*U(M0khCc&2+F6K^x`_r9NvkbauLUOIB~E zqOAohnocZ1>Zxv!p-&2wu(>fq24y%5xWCr%EI>VU*N|`$TTv>y zJ5t@xw!h%ou?1^-xBT4P`wo6)42>Eun3)dJB$EX|>l|4`I-^Tlr7~2CMG4zDm9Jo# zJ<9~flJ}(NuWTi#A`UfF%K9Ci7^E!~a! z`!ly#z#jbv&{PBUj#8`@s%vX1m&1!#QRU+yV=cVuV1~x_KD06HdEpb3K0n&%R2t8>KI=2d>v zBeFJvP}=zN)b7W8RQS?7?wCO$TjHt)XYpXVpT6eBgZM>z?>E{j)mjD1Wu!dfSwl4> z)zS&Pu$;7e{i=f%q9^!TQUAt~jP(5u{jPe`yf^6I@CYHagk;cI7uUk>Ln>YUiD#AG zyBV0}z+htDWV~eNb%iV*R;sB^P-1pWInUnLh?kc`61yXRi9AYRIW+;5^TxT~SmE?i zida0HIV0xGgXDk!GP#5Wquq9lagCJ>V5{~uVdKM%#~e)x#4fPXL-F_1wA}jDyLneQurP0tS5YgS zBhz1oFp#vceDT#~eB2>0|Dt?UZLcj>f$EcRpU=kEv zUq3x?fKV-4StKZ*lRw&*MP%G}%c?e&F~mA!fyS?Q*W*y5Ps2PQHdX|wYOll<0O zW48@=EfFebO3j$Q8aOn@Z4&0cly~R@JqFKK_U9FwKn%EFzwtGHT^@ z&ks8ezwCZY|HArw6o&lCj#%h(PCHUGQ}L74+xrj1t_J4t9>?-ZmIY-Pf&4506$)RK zngR|rMNwM;Mn01{Pm(^g)=r@yy7o*@{05<^h z*A()d#g7p>Ncj{ljaA(MuD+d@Ht{vf1(_}njkCOW#&9W-(dYXFs3^KUJ&9`tLm@+r z*zd}351D$8Gc)6aOG;)#x=)>eo;{RYc2wm&+pRboghIfmMJ$xRl$7Y;AO+3Y3g-I( zyTkz_gib1U%R>lVzQ3{~9ZpGso|y`_u1f#8=WatPddNVUkP(Ixx+^%1M#Oc*uv8jv zNv5vk$}>LYkal{H3-(Zgj2HE=dT@vX#E_jF3pnE|r|3sAPM=Cig6$>H;1D>mR^{88 z?xaS$zWPM%9yM)^PI&=abV1RXAq5A|O0Q?En|*7jXDAqiW;lLoQ3wq$nWVBQFV*57 z6r(E}YsMbPiZ{uSYcujw3mjw}kXU4I>@KrZLwi`1%nXuap1ynF9}Bt)1Yqn4V|6sx6Q31Qi|ovbJ*eBa)-kG zdJ3l%PTS_}&Xivq89@~&nT61XT5e<1tXn!5gOJW(S@Solcw?;hm_{0lZ;7i&vW|XBl<4Fg2S05`WX7FT1i^led zgiOBGbd&W6fU^GVCUP+SAYnLJY9L7GAFx8-p7nl&2<96KUe@QnIH_uW7F!PAEt8$E zb($WjMnEt%R+MIVj+j^%9!D$aERnGvUh0L_AZya}wj@5X(HMc`M zWY|G@i=5~VjffWbVI@Q-$0+g_`?^NlAL{yyvHRqBDLxM6x!h1}k)?2)jAjp`;$Q8+ zWr{%KIDZg3x%D)qZ!Sy@+7eNjQF1{>ClCJ0&?v5mDJ6_+Rlqlkav_^%b2`Qn$H@n_!Yyv9)RLzxfe%>4gzjN5=Swsr_}u18x`` zFsdC=KH+z|B8)DG?zyaNJ=QT;x&nbPTaW%Vcd`z+dTEnKpr#5=| zj$Wx|J8N2sh~5)Y@_Y%@KW86L=h<UYcQ-ljq2 z?R$4GoC-C_r<%W#4Y$7+5lZZf*L+lH;brRUX5RGkC@o$fHi81FwrZyl%_MvH2LbsW z@tO3k1xo@r8-Uw%i<-`QQI5B8+HWI$p<9 zpwe#_`NT!&6vvYlnPX9{f1-jYbzt#(cEz{o_f=j8JF4+76Jv%SOOxN=lW~aQtOMa0 zA_G>$Kj@H}9m?4~4ke-|lWB{JntIdFf@YIk$Nh|#sJC|wP~~);8Gjl%Gn&SU@mi1h zl>u=0-l%moN?9viSWFBMRi$W?_(8K9rsV0dXwUxi4cdsTceCja42d5LI{cxqxd|tb1V;+sh)ds%(EM=hNp>R!dT^j^Q9mps6EA zKXg9tj_5Jd%}go&voAJyI?9Zt%0G(l>CM2ZmEr8jKpeE(3guj9cnvCL@XGknTeZ(d z3Osgjz5XSg+~yw2RvdcFc&UAbVhJKZ>NK)87M>(H z^*uOP#|uGRy&gZ!x1O8}7mpUEs~M{Gv-!W!i_rEQtg565EPqY?yuO@OG4I{YIFHzU zP%-NnFK9_oaQtXX{d`@vm;VKH`|xyd(mM$C4`OQQ>6~#fg8GFJ0pckifi*jS51jR> z5z^zIP&)L?`D);Vzj=xDS$_LRG%)?vRH8muMfebye?=sWzUTbWg@> zD735Q)R--VsiL%<1#~F>*tEypO~G(1+BgY#$5l~a)Wt((!7TqY1w?ajV)9nW(Irw2 zdNyN(l-19W&AAG}idbt_U5-S2WtX8D2x7E;ay4%t|H?YB3M6~p#9U#%R(`q96R$r74QT~i6ees2jA!=w_E#S zi{FggkjxqPPU0a)j}TR#qUbyE-ShjOPEkht{^hYH{E1SNA*20BHvcJ>;OBANev>E^ zD= zRR#I@;r1NjL#MLzhEP(kh2XhT4@8?p@Um(&Qw8q?0W5Jv>R?PA>pvbXBGFL&)c&k^ zx?GPE7WBYBR}Qa!nUE)2GkbW07Bh6r2OG;@5{nE?J(WC3d`9KOY9v2#-&367_r!8A z@^m4U6YXFfk$2oGCVcRSzgsH;9%6&ZT5l5CDjGXYGoK86f?LSU#L3VtKisU6hUnU&01|K&2gx!;JbE$VgA#*khE zLgZL<<@AJ&KOyBPZb%tak)|LjhWLAyske8@GcOl{;CZ69fVfFpNj4lbV;xuel8^>tDj z*aMZzvuc6z*77cgNlr}bH-djS-s~p{k@fzWWEqcsGeAVU=Axo!kf*O*-bJZLL{g+= zPT_UNcy1v^MtcgKXN4%pMYGYYw3W}+R8-S zF9OE*SGZ#A!~oT5rTyr2H_lGSRP%-+x9@GiRRbIY^!Kg=7TdB`V)Vs`O66l~!mW-N z{Exky7wAX5YA9~lqB=kEL-UTpz;Dn7QD=yt75T?74Bu*XhN^6nv}3Cgwz;E#H81nX z9s3P1QHbyWq=X=;zHg)9Xdzb%fnc#=q&vcUPlqzSen-g6Atncc*W-L(Ut%c#b& zLMCd)m%nGf&l#tD#kFpcO7c5(U@Xr3IJGlP%@pe33j3mNLt}(7@Mb`2-oD z)Z@jhunR0brw>+a74_k6Oz!IeZP#QjwRaOm&+K%XY6qHjP0`K+!eY}p=j;b@@o0`q z*8)B4adfs9+>g0XUC0jGEUZzKOlyUkA>8fib@jsx32ywX$&QG>pdnFJsA-9W89g=r7e;fxb&K$$6Pv)Nmk3S#u?F-+#w~&esaeMZw6MF zN}oC1aWqDA7^kc3XfNq!S!FV9h>Smk5fYv|4;3V^Wb@1 z3j7UEFcg!PgZm94yboe8XdrD0EDXdziiXKJXK`RH@;3(o3cRj7P+tzb{UDD>*0=TR z$Qud^Lly99K+T&Kfr%*M%vl$pl^XE{@x?$426%?Tnx8><)8oJb5n10JMwx5?=>G&q z!gZ^KKN8GrB$<}RX3$oI}^)a_*CC% zR5#5iXnurA*N85bi<+wDTWREMg$Z*#zZlur2CO{zwzYds98 z4Y=PJ4zxS!JyrhN;7?27E!C%DJH_02bO9XGw#cnOl=R5Eu4)pfR%H|d!-@7leWWT@ zo1{hfj~uCc#tzm*8(i!EhqDC#5a#*jbNmx0 z8KP>v&HwSYr!_G%GZUYy2Q zzEPIo@L91qR&|K{fjO#>S-dQztZ)Hz&zx1r>{ga?W|A_qwTAhpD#0sFeymBcIKhc- z!#j9k+$DajlJOsQW_m7ydq6+tNgDWv%uFnF;SH+EvpKm@rBuG*Eb&^y(v`2G8qLS! zM+NXqLt$q+VB4o(v=~+C6;kPugxbQgN6!!XbuUxlp8VR!P|mUZI5+8tq$!a{cS_K@L}ECp4gakK1V$0-dgCK{&O3S+MIuq78+3+L4E@1_RuGfi?3JA^yUwW zqxSw7N9kLZyC(-%R9^=Dm}?5IyR5Nk$~M3gnpwVUOC)NK(h=P#j>{EQvF0fM`m9F# zp+~lqd9<61(=`tJcigL1T;L%yeK%UiUhL9_Pex&vNxLgvUz?F(8u~|i^|vkAqgfMa z2=*bXH`tAcZ+$2L^It}z`Q@L1+EH(w^Y-TYl?I9H5<0ryfauW%64@V{p&UlW!~Fo! z7n%x6zfP(FNm=qSBG;TZw}9t5_?tj%&O4Un7ScD}u!GSXQhi!qINvUcH;iwqZpnm_ z(WE0X0b^1D(o%Z^pL@1?m@fJzdE=wP+eTU^ucQ&lnV=uqpopcek-imEtqb<^b*D;> z=J*HU*C=16!01fSn)W$s(~}tLW(WXzHXJ*!)#GwSvRpD8D{8J!KAVytYHm$2yNM;G zIC|37-jsiG8AVOrf4;R8p5M)p9~)Wys!a>mCXgW?Kl|{=t>|LUo>gk%Lf0b7H;1^h z_1vJ!yt5^5dBJ%_@#Vr+G?d`D!$h#Nb2;#2%cfa*G}bG^w2p(vPnEf}SQ`LEcCOyf zQ}kQWxL4gP1=Vr1%e7s&p4)b5N~z zi+MLZ6v{xaIL#>vZMi$>{UeJ{U1ecNLT|Y6U=@a|-&@88FAFXA`|x^pLeZr;9pH3BVyP|uAtBCH zX7umq$l6M6Wem_!xvpliSxJ4q6gcuDo%Si-)w{o*|NW*bO>dB+!fF|5KSRp-P_Ii% z;$>H12Z%J+G+U-@zlx{M~d$g@&>6)tH*V7{Ihslyd+i6roKONh}p91c^ zIi1#=T8>WVV$drJ9iVNS#g}!7-ger_au^|y%^=Uw>Dg@c1MoJmbT5}|Z*ZN{n@oNU z^PYb-m)?k>v1LJcv1ov-iTX{i4BnN?GH; zA6d)c9IUc^PoIwZNCxLU-)@1_c&<-*;fG;}7t>}+Gnquw2k323(*C)eR9>Ad*4)oJ z9GWQ1vLK}vB{c7|_wI}~r;iB5Qh0fCGth|`HnzxbHEM5Mu^ZO3bEinsGi0R;n{5og zY<97~C%(iTbW_M$AN>;bTi0+Pt5CO~a8tf+a~tITM!bJno!~xr^B8{lL8vV>5CDVY zq@RDf*tS_oOo#uyATQ}&s@&4ocfJC4d2Pyy**NRFxyg@aX3Jv@EOWEV&rHO?gSI;` zFi7NoV}pcvIwPomlLV@S7dmZ-81#fVbb^F7dgO#adR*|`glu|oaF&EadRn}HeUQjt fVE=ki!TxuB{(MZJWe|X1r%bS6z=5`*{8#!PG3;o@ delta 11356 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 XP?Cj(dlkS#-hI$eP`@D*6x9C$*A0PA diff --git a/test-data/visual-tests/effects-and-annotations/tuplets.gp b/test-data/visual-tests/effects-and-annotations/tuplets.gp new file mode 100644 index 0000000000000000000000000000000000000000..d8b9b99b69f78d78cd18e33d2e7aa0247ec63f95 GIT binary patch literal 9242 zcmaKybyOTpm&Rej;O_1OhrtOU5Fo+bAvg@qAOQx4;O@bL1`80}-Q9w_I|O&zuzTL! zci-Lbd;0Y0?y6hQsXF(M?%(ZFlz9b*3-kX8@lT_eEyNKFab#Eg&nQHgm$v^c!at9H zMTuHK3>{om99^x!pUuHw$J|dcwxk-)KOyrpQ7jAJ>6AUBER`&^h@(1#(_loRV`hhg z`h0MaoChnK5%U@joS`45)V}?&jCsfW>;s4BOBvjZ9L>ThI_1Q1Uh~BiX5rg@@$(_{Eeef0}_wpqTEvAChb+utO7mAaWCS&{t@^+@pn5a z?R1{SyIdSK{H_lWxjh={jyPcQS^4r*PQr z=1FRp`E+e`U5rN>R01=U!2k7)rNx~X*rvBW?mAK7DrAM?d*cqx3F$+@-L6Wn*2p_a zGt1a9zvRU0Y=(e{^g7QoM?pAuZa^!Aa+uO5HQQ~y-~l%ek|+i8RmAE>_AsFCpWy85KtcL66FM8X_t z1o#c}yqoIlT``)FMBYY*xCwI&aT6&>xbz$snNXdpH*0@`}&Jv{q>lR@?#K> z<1Nkg!v@*eFEimnA$YDGR=OPDPoY9w%pJZ0nOKfJV)+hY54&$jg)ID+$N5hi^Dxff zGmnKSKES@AlX4^djV`hGeXqx^z>2fB&komO$HiSePn|Qn4Q5*4bX4j+fs1F1TkFSP zr{a!J=6K(6LXP<^vP; z1)YL6`4`VOXt#{z!N8FEv5hR`6gQhPdi{!-amV-8dbn%^nVUo+L5wXJR_O%vf zsk;{dh7UGg+Vz3_TKnYLCs0TVUGyq`qc|k)ij(>CvuSb&I8 zPzjr+5}kE*c}0Ca1HNH7S(Ie!u|x#nYFlA(%Bd5eB}!Kqk9_GVM}aH^miyw$5W@!g z-F4HwylW$p#8zShWFvp0ep55Nm#UN^F2?F}?t<0}Fb=z5 zmjOJxD?Y-B>R!ou_7x=hu;_+a#TTHfscOnmG`BPS94&>EMSf8DX!@!2i(qn^bUKd7 z-UugGmK27Ss`vS*m%XbVJ~*_=6sbtYgQ z2P{?rbS0R76yFFLj?fjCu`#7>z2G>8vO*3)*OM_aKxS4z}&wX{---zTx zD@z)qzcrN7W;E$*Byj{e++r4UoA1w5b`v(;Uo@$-2bzsuXAfk)}04e2?N2EYf&JxHHb zv}R`Vz2m7ot@dvGG~h@i8yU0+3!lFd>3a$?ksKx!>g{~@nr1!E7hUUgBv=&x*sNuS zUQ=h}ybxPz7h97#l-=`oE3xz^qX#VFn8jtGtiQ>s+c=SXj#L{s(Ez8^ghWL#i_Ve< zptsi#*-dtCco@6~w;34qxh;o?=|Rv%Pqw2U5o6zPTdT`cvWnBkC=opCkjqwEE}oHD@?)MYzvhwsvXdl2=Z_o05Qf+1~()!-zKL+fJ znT%K)cGnTqc?L{GVYEKwG37rpI8sG60s}@W93T#=!gA=1 zFFR?icny2UrS(9mQ}~(c&gbyV%V;{UgKH%9@@OM2N&zGNu=YU1mDd@LW9#*apu$%6 zEX9g-!g4+;(!7DE(Z%$$P{x$^a#-~*skWkxCUdnywMyryLY?tJ0UI9TpkXtKOAldj zswkmB=MZ&PRV8!2lqUI1?qBZ`BcxcFxqtW!296Xy*byK5Zb8>i6`9fRSBrU#k>o-d z;EYy6H;fDXvzfTKba@DK6j7LXXe>3?1QD-|G>Np~_r<0)hmmmzT-=2)a$o`zg>Eo3|E}KDaB-aR5t}|6Is0AU|WmsEtMBj!YKWwqcy}iku zYdlMPwar3D$VW&Xp+ZKhcfSBVV!Pc9K7AtTF>=1{x;JU=L$U!SzQE*$uhGHj-|(M-UYU^Em4X!8ybE6suvu&MPSY_p{L;ub>(N zxAC|7YHH+dc@|Eiij9L|%OZpWDF}9zRJw5$wC3VFU4yg>Y^;tfle9(}UpoLX*p<;5D-x|L*A~HqvCEGTZYa*)H;uga+R2^D_#sy18xC8V@<|Cykb;p6GxzMFFIT zW;MKPH>~mK6We$QUL(#rnM#*5{glLe*Jb>6vIy#A2|Ry|h))0dK$qgwUuMxio+39% zF}sVzy^RKmKKb07J10_&+?~sc8LSC!3{?mx2ijc}JC*4s2KT9DlHUEA(>ROdcqd>s zllok_0@>nGo)xl6qVJUNavV7x%ZHR5u@YHt)%JA8w5y$2!NZO5tMkEzN2W}rR38@` zYl9$ELk*y!op`|Xfp`TugQh`g@&50=nfy}H9pXIhQT{L;(gux6vL*wa<0KN*id>ZY zlfE|*4Ob>z*RCkz0p>C*zI@Kvm7tBXe8?|~&IO!&Pp0*N>aiq8 ztfTp77;B8ZMt`>f&2D>1scw;ibO%x-z6AXGKOZD~Q}J$!Z7MQ@9W_V9fQPO7*Bo)! z>Ux`HxK^*3%iQs4JsQ0hfk`Hhy)7gcZ6$|#Fq-IWq>#4IU^??DlLq8r!q>rOa3yjL zeq+x|ZQe-o_-L~11R~6Jro*T9_mfJoJepy@&fke%$oSVj z-34k%rO>{kq4k)zRCH>5wQ6LXffRua*j;Y|c;6q@meRtJzQRS9%YN*M$_uKM%hA~M zF<>waKGIBq*?n)#nX1%bg@en>8f&5J1~aeKL%Vg+*T=0zK!h`ws$do!f?s#Nf4#Z`-SnC}MZeAlgFvt>~l&(m*Ue?l;H_a8T5oZf@) zqa~Mbyx^bL?;(7ff8NB}({&qBJY@qxB_Q33UH6=sCv1zWU0n)% z#LCkO*0ll4WeB1dm3X+wSc%Trnd0zVvU;Y)Kn?^$MNhi5#L`Nm}tg(8V9NiR{@=IVe^hr^iKeVO~cLw9~B^64dAzWdxW#x+-GckFTdmxUKU0!ZG5x`(VmD1 zot_{bFo@@gpVQ#a>rU~~*F3xwKWuDAV?I_bQ?Qu9$f6uKRKrj$7$OPDNWRc7*_@@g zMk)K?Q`MK6veBg9QUT6-fUiSA4PqvzfhRaT5ry`sv~e;{WK5&l--EOgkx( zB_T)x>-fi~NBwxaju>`(yF~@r_L0bX?LCtehs}Tbxzku-??{SLJd`svYTt!wlMF5) zp9`i5CW&;X!GS!}WRXDpB*>Q0$)0QwO9bmE@1+i1ra%EE!Rab+N z!46b3$UM>N+$MS`9|G(#xFS*-6O~k0%6Qg0B#u-16B{GaIPtYY@q{e#VM{bKGvThx zJC;%DiMc~~LL%&m(Ykr$#v6bfr3xOUW7q1@luChZC%9mVAna2q3iKuqx3o1mGfT@H zWzs%#Kx_grqO`D!O1Sh?7D?3Pqn!?beOeZ&`{cN`}0l#DIE z^3CaHxNaCyH{7fWY7{wFk;rl_R#Z^0XmxYQqLX+jV;7&aX+!wD(mU~ezE@;pv1boA zMZ+KPL#T1U;=6Na7fkg*dLKPe!{r*URUvIUnx z6mlZV_VvV1QLFQJ`%Kvx(Ju>gu?Umx?2)!*9w*E)2;$vFFwf1k`&i-R6W?ge>H5Cu zSiNl!pSPHlX>rlm&w2!fN{RK~T*Lt*Sl9I=P81A93^k$|l^-tC^sdIn2Fa(DOnY>% zoAqpga_JGp6Fg_)JOBmXe)DLckCfDh?ru7!{aO6SO0oMtZNh9netXC>oFh5OKa`uMwbj zNr1dFqi8Ja>hwJUB+In_Hbrpms+ew!MD|1Oz&eG930i3@O`9;wx8G~=d>q;xe=rAZt>Eg9<(G;4{>-GB0*&6NzRj6*37{ z6znDLiOQy|aGI3dfXrn^Z9HQHqI4_=8?6NF8sS1Vf7Hr-SY;B^g54?xH1qXizOpT^ zBGy*d2Ssntk|cWA{m2vm@`M*4^Mgz;`^6Ct|x2k>oH!w)*EVY z?QSrZ9j3W4DSVFH#dWg%{3g*Z3vTRL%bWYAPDFk;mG+=*p?lKjg!463eMN`Fq!j_m zYJ{)cgrAr$(7ec7^g<|qhDUjPRJ(H`@jhj@!~1EM_>8jJB2RNA3j;&{rw;kA3ymay zD>TX)y4pH9{wX_}T9`RG7&=GKalL)^t>KS~iXhEW$D9y>M9%*>u9<6=| zyub2VYgU&6aF<`Boy8zic=Kq%ewvu@wLC%wUV!&7ld7|YLAEFZ*{Hzgx2Kx-gI;gN zy$qU|bs59iofIGoLQvaIoVGvH|MG8_fc>ZUuVU_JV_OF>o0*-3>5-26=Y=|~XZ;L7 zzP#I!EM6$aJ5sKun2a5Zv|W}Rj^_G)MO>4$4h>0A$owAkn60fAoSa`L^eF)x(gq0Y zeJTsnjgGyY;2WjWH^;4P^PW@BfG+so$%BlarUsomcD@`We?A|6JQu+Fu!( z;&Le}VwHUCXO2HJKwAP%r|0-=364!Ti+Gs(Auv^u;7aH}7_7^>|B7W7fr*h-qmE><-ze!F%$n3x5dm&;`lAwKsoz z0Ysviza^eq6S^%eL=+;7KeQwsO85}1SJO}GwmW1KRX<1|tj8JEv&r))%?22~@?K2r z=D6qc%(@aw-)>dLT|>!P7-ljsW`CeOvxc_XBvX~^Is^CD+g2?mN8Ha3cSCQ<$o<(H z)@mPFgwgmhnvnZ*KkHE;&eGBEQ-l z1^cIzwC8(10*ScR^ww`_Wa{5DGs`~?hUMv5qh20mR*9s+!Ftb2}3$z^e27ci~*V$$%f!3ssRY5{@ewY{L8m$>N zrZuCq@l`i;)Q?n_R8gx}WG(D+R(w;~W!T`UX;>v2#J#yjdT(q-ZWq%zUxr*FvmXFE z+3Psy(d}U=F}>()OlX~Am5gwL6hR(5#2=h&4$I)$0B-S{HAA+-C50FaJB*=Felj0& zg_$?`%%tnW0+7c=3sm~>N<8KZk$T_{)qH!7HzPZdRMQ^vWb%YvCOb<{y*YH|RG-CL zj^H&c@**lVBaisuSwDay-z$9~@&CAb>A@g`=5oEZ)XDcVxd|WMG&|7^de@7jV9MgN z8YMn~;v>H;QF{?wYWfaU*q1j5Wt;Rl+Zp41scouE>0YDMvzhMYMq`_tAhO89?A1aw zc?QNEb4r8F6q#I4_ERt9nr%jJ;1i2beTrQ)UrDi(vC1*nx;Zec#YduFqlKDBq%h?R z7F*jQfMLp-hYIwYx}X%cSyTa>#q`RA1y-yYky@_=PqAaZ zLvjGVv^Y;?p@7{_%AK#3mgXe;yw28*%dQ=T(Jl$_6;|xY-aJ^JOfB29M3d(^S9&fY z6fg*Cj#Z$tIY?2Nstl7vhjV6J+`Se|Z;ek3pec&!NLC$;PW_CMZIKR)AwV2sDRo6{ z(IAoa&qeea(L+8J^|&OFVJ6eYnt;Yl@bznGe;EIiX@DgAJDeb}IdWQFH? zpu0zM)b4yHB@M0W3(mm_ZIQ6Pwb*a##*5wZs#$VPcWp(~VM13|CSL@m1&j*O;~Lm) z(!zEo4KqMq%?wDR#^v&%=@hB5=29{lc8t!2H_JCM5|ay_7RG3Ar~1D_!~G};zdwnn z72%6Q?;SB68)Qm1&geAG1oVGz^WVRiUMKyYW}1Th6I=od_VaY}mq z$w+_nP44e}8NwM`%``9a>$@2i9^(C{=mMAVRpV$II8PR(Acu2iTg*&Ii)>-U_W24e2LkvIW28KS!5$3lhvfeYh zOD~y{Rxq)#w3K}x{?3)#gT<^i!NAn%1}rl8vIGp3^hJO=I|e=~peufNflV1o3mf7` z{t3f?f-zgk4S~igNYnGVj73zIMG9n}$5O>Rnuov1h*eC28^hs~GzGse9fuKKyY5Pm ze!r^)KdrcG_959H3(saym)OU|Ybs7)x{)GEID_1~B`@hmAp3=I(2aJ+F4|hPhWy3# zox7iD%O>ULNDN&&ie#0uNM;(*fEmY|&TTa@tLX;&VFGej6>-m?X@U1RCcA~5talA1 zueN%=E91FrV}S=UH}}8PJb+*>9h6;qSIZ>TBK`TWID*v@3z0*8nScqzz#s#4YQsMD zd?ZiZEgcj1^*ke;*_j?hy+K@F?b$Hb;bg|X!d~d1Sf(5u()VZqFECTVJg1SotSJk+ z&6-4$wQ<|DJZq*})XaeWeCn-Wo~V(<4?46hoK3awq`AEp0X@kFv~uc_?Hrh0+?BGU z0q92{{tyNU`whGW{FwxhZT7wsTQODI$F)2e+YelAZab0v!%dlLX>-3#$r6*cu;1Aq z6>0isgrkfH3(t~+oo$R0Loiqo#V7@5XE__Xc4PDs->1O@7TabLeffxX6K%FL}D*8rQ^)kJq}k^hYoWnsJB;!I0i)z z)(zwW7eP2f4`X|nJ{jWv-TtmrhYU5N{l4Pyjsjcr(NFXrCB-8jX&-7uR*sB`0wI)#Cs;#tiZHDB8#Ofx3=V2~;XpdSc_`+wNl&%09O;3PB zlHK!CilXkLJ+n=1$4~sjSJe7q6%v!bwb@EmmDRE>;e@BES=<7^lB%9IPC2Sels7A% zlv*)W)%|Bg+4c+*os5{YD!_Uy2_9=P!6W4f{7M6?U9$c;nDQ>R)PXhPa0n9Z8qdrh z6zEhc8mN~M&dC(RzvkLL5`7cX;qJUQ=F^C))q_hriV(oZRs%#m8u!cEVBJ1~5nBO(YQ(w1Sz(N= zuEOQ$5)7HQ-C9W2*F)61Rj-?t~WknUtozK z5yaeKu@s!dXQrJwfi$fgF~fk;Zr$K@#+rc{q=v1X1xtNyP5QtJ#q*#87Mx8IZHb#3 zd>xr5mLid~HrHtZpgO{u6Cx^huJ4R(XY zUl)4w7j|+JZq*jLoyRN7UqIn#^GjA^5L+%KZX$qy?@ zAY~Tkk5Bx!&oD+0ULOW^U|?oZ{v9SE{9yw1kIE`i3i4btTre;}IF0A8{Qv%mEG<@|3h|HEqk9RHH7mrT86>?MG=x+^?&D8 XQ3eSA(t+^j=!J!WdH1Ia2IfBiAfnHX literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/effects-and-annotations/tuplets.gp5 b/test-data/visual-tests/effects-and-annotations/tuplets.gp5 deleted file mode 100644 index 5fa5d3fd3a986e02e6038ef986f23f3074855e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 zcmeHHO>fgc5VaGxaZAgmK;;0M%c61!v`B>mm%46gEH%Wk9aY>g@lqn982O`W|0YuZ z31`9^ud$O>K{*gkjPz!A-n{X6*4A#lbL@_Ds;?;oge4WTJ4FL3-oD4lh3 z(C>^~S@?VS1x!tgN=owe?B!`arCE0Nl3*ah_(lo7!|JKZp4!<7@DCMF;U%rrHKL(wp$x zycFApB6cdGRD7%mLn&&aEO9GES<s_oaupbSMEd{?-%BH{ qxByGxV!@3^@Tru&stsvV>`X9K&f9r8E~lUD>+@|~CvGUF=KBR(g|pWH diff --git a/test-data/visual-tests/effects-and-annotations/vibrato.gp b/test-data/visual-tests/effects-and-annotations/vibrato.gp new file mode 100644 index 0000000000000000000000000000000000000000..96aee901ec803bbf02d9f5ac9e9ab98a3c749721 GIT binary patch literal 9009 zcmaKy1yCJJm&f74#oZke+%FagZo%Cz?jGD70>Oe4+zAfBLU4zRySqCC4-Ol4>+QaM zyWe+ax@M;P^uMO-)YSCvbSufiz~Vste}?dqFy5A2I2PRgxy z+Gm&i1I~`$+I1!1xN(IuqAbS$EZLunHp?W16c`A^yQ)#qpR3hRBMs)VWA(+ z_o8ZIn!t3d7$GkZNhg!jd`XMzvFFj*nxLZq))e&^3C(t=zLq8=KbfZvjTb)rzs z7Fr1uV5{Txi04BMgQ$$WwjsXR%uX-NZ5!7=mk!2#+lQVvt3TEgkL>=kdTR3UWu^Hh zKdSnXR#UJwZV6FfGnYI*=|xp#w!L@hP`Gr)`$5Chp(JopyV< zQkv#;Zj5iraY;fepoWupzP`7%x)(G1*w>hFldSkVe2x5D^B(0H$z$>TzG@$MR6xqY zI)409YVu7UT}V_`gYSh4Kdd(=pq*SLQdvjcepmk&MsntL<7vUC!~DwjXLE3d)qbcS zNAxHb7O{dJmSYWR6a~Q0AA*H@cmJCrLcqF{QV8MkP2fj$Vy-^VfV77m;8c@Hqzff4 zk5Qq2OJk!adJCcmUv#*a;FlEe!S|cI2Hb`LsIIf0S~mmpiYpCYC+Rk6#&uPmLb+V- zC~qFONG~QWgh~YAIQE#S^MiCE1UVSHf_QT$Sa&YKI-FW_=c zg~-LB-&0F_k^DlFJot71aVWN7ukUxjvD)+S)+p3q&+CAiGCErdQ8Nx&oFDlbKi-1qmw z-k=&=PdXY`X9j5%F~?{nS5S_d%uC#K$03y;V%WLJ2}LjnbwR~WNtJb)g5?dM)t%to z)XO=4y5s8iY|gCX*|`PsihEZh46iQA{_I@hGlx4isw9$S0Y#$}k9A`r#r54AFh-@f z9{`FQI#I^+k?cnM>?Po{pfsB3@5HV0@Pyy&jLt9SsSqr#7#t}2vBnj0-|9yCo2}3a z7A<9J+q&wS#zs0kqiWI^srFOJD1!BllJc~3S3p~go)9kC%5%OVX*e|J)o&y8kM7?* zx4o--wxWscCAUBy6>c?de~uiaE2l|_F$Y|Fp!NYwBCpB$aOCa=K6fzA8tHO-HI`o&o+%TV_8Nqv)=E&7W5Vj*K|qs(3WjaS-g! z2438kpJ2!IuI0W2@e_(KdtvM(zZ~;(^wh^Qi)b-NZBh-8?K=qQ@j)SZ$fDw?D$AB|i31=w+l85Y!S3>( z4w}(6-G;DGP~iad_d30yrKy1&gD}p7hPh}zrlaA;SC6hut4`!Z-S^$O65bmOlrOk% z8Q~CpvVROWeM>){{?5#6c8a#gpFWYV3ld?|U)W5KtldA$fI>8$RO% zVEG3?Pm-~;{8rFtl)Ai%g&|{yhO^~}390!fBr|cAa_VMM^Q{_DE7?Jz_xftEF|l|% zQwDvotvkiXv6QdTL{Vh0%ejmlLEqC^Og2qs&E3 zdrl6w09WmKoqw~=pbMc~bm%fPT+v!|&^gFdYJ^0vuUmkIaU+17T=|{e2O44A>bgWO*mT`%g3vo(y2C8l5WCWpSXC*P+L{ZX ze=uOTpX%21IP_rFVQAd%wHhv_Z-*v&wj29|5HGxItD!)_EI}KmjQ^rbCRb;@{EUd_ zt#lRb-5UIjT-_hVlJ2q{{-I#i)}x(6K_v}$M$+BS@eVN8yf=LPW3DkKqhFxtDdbSh zbkx?Uw*kMwH)JXXz5Thcum#u_L{k~}t7#>$LpkR#7AbzXsnc@(C*(;`O@FgGr-`Ag z(gwEkXfA0uVxS=df<+c~6HrgB?8AwsLf+8`3~80EUx4MOVMG6!?R)-EiHAdZ(6--) zaX?0Xgx1eEkYK6H5%1E0n6Sk};F}vR<{4RgysF7I6FfRJ`h#>7$_%k&kSO#Arc+;H z)meKD4fH(+_>n@l#QDvA!10Bj@oZri$7uTX$yP#)B6`+w{gI~UJ2zOi9hx(K#htu) z@-^F})glzcMMGcXtJxR9>>2;n$ht}Cj0PCk2wDq?s8xO9O^JkCr?-5S<3?xNn{-F`_-Jm%lSXl#if; zHC~I@GARzuW8mP><08mcLT2EiwAR|-N4PQ8BGiUE6r0r=LBhuO@D@bRhx(i>c(~_=hVA|S`Xbspi01ZZ_#z&?uiy@Ox zhaXQb#U?f>B|;{UO|nBTB{F@`RuYS2XI^wi8;(;M#9Ekx*D*hpkmU4tc8qR!b__Qk zIJRu{LHYOaN!>zC+X+{HSom=fyM0n(T+NlB^aDO1`bmUyHh=Tsh0e%Jh;0DQ z_xdcZ#_w#&2@_8In@>J+Tk^>r#Jwy}pf_xc6U=A$mvomi%tpm~Fz!6xF2+LrLVx0W zP4F40tCMvUTDguXH4jCuiVzH@!8_Ex(MzbIvXt2C8KPQZVRm7frZU$2+6BlhiL}<# zxJDW<+px$F?wxI6AxQIeMD} zqqj`L-*|{nC*bzdE&0vp{iU3k;fB!GaE(yvXNRkD*DAf_uzvL%lKaU8&5LL@0bYx_ z^q1N-yB#i-c|n^L+HQp&m(kPlBD<;+WGV=(L%%y3=wK zZIIoY;U-YoULs)jNTP;}PRp>e{P0)*Tu~*-9#J9Z7*C`wNt0$RX^WxmX$rAgO#$-5 zS^xW}rr)MLH=f87A(pahLELV6wVuw)%ZUV$I|;Ax&xC|~Cecf&LsfRD>*om(;Bn`HhAjb0 zLw~yp$A*Tn${UZ$r`c~Am}2_W*G7ERQE{vfrG>^qV%HH7Mr}D`+JrPhKoe#GTOr@{ zY5ZlSI!RhqmH^+}Z~*pA!PSJX>+)Ie?+zgT!NR5ckc3lp(>Lc1a=hi{+g!iXKYwca z`U5x-7YKvau$fk{cuh3cqmztbhd-hM9;zHGz6fK3`N+BB!?bcdmsaHDrGV&_Y;gVa z{b#Ur8kGPgmCvHJl4~=}y0J+%ViXo&f3pSP|8P=YNd-#+gM%iY_XLS446T>X*W3;; zq%#jY(Mp5b7q(?jSMIXG#(BpaZ>8r2wFrh#?OgTubAs^+vB$xi~JCl)h*y0jqG8g6hxomiLUeyHv@y&o+0Ov)3522HHb@J8Oj6Q=aD2XOsV zWD3n!Jc|Yp0=}Zl7G_A#T~zsuInb!j{h^v~8hG7a`G$wWnnuapk@jk$`HskrD@4n? zK5%7|9{SJ(4l7gw$gVsk}M z$?0Lf^|`4p4h%5zz%9_+)P3rhO&xj8>SBcF)DG2Zzy*d^rX8!{C8tox9!I;b68MB! z2oBTxXeOV{k5*RU;~{G!y5L}r&2`P}n-OPs#2+Dg)(aNPsPJQ~_k6hazQ>;BLgRvJ z!;U_yxubixTFUl-0hKwbzpjLYYc2KDhA%a?<#XC3?^wjMk_1mgeM4*vH(j{Cn{)@9 zLZ0$Dj>L9#B?xT=4N-=Yl>;s&M5qqHW5aiXz1rGuV*8-5;_;;_l1#?rWTuK5K&$)BAiQ>VDG=)S2dwR^F$D3_Z*rXy3 z+~$viphZqf-1*48RBm}Jg)bx^fG8fwh#i}(MoU#oFk5!IOOHTn#IcU)sF6y_wG>70 zi_2GTOdcVL zoZe6(am8wIn(8Bqhd82hM5Q$+E2}b9acy=!Iq_HxNjGy&Nv6@4nlZ!}^lls|Wz;h0H=Vx3EqqqX>WWo*b>SX<|- zkn~#u;**FFWQ4%V5+C$X${RhEo(DGo@InePYQ>d!qy=YZH`m-uSXPZ3k~FtT&&_jU zvhEx4kSQ8_15p(fuTBsr^H>2_96NH)aE2peR$lK{zoo|5HKPqHl=AUnb2bD+haYh( zWO;X`Ee0Kix7PMYWh?%%TSHP_VPWFlNcyhK9ISf|D{9P<;DXHniKW;*rzu=z6YHjtmtI5M;%^PWn zg*)Q0dy8!*vA=L}^^De5%O26;SX$08tpYEUmx%==QKO?q!b(=sQG{2>V9%9e39GVG z%#W@*)R#C%sVmy=H)o|syDllfBuI5|MBJ5qnzG2oPxKnaxU|&nXNFZsey_Qp7xcbs z{jN!3(P~<@%|r7r_X!jsEjDm_l>m%l-qe>oQ#2AW(u}27dA!ch|2;lFL^i8z4$-@5 z)wc)AXGN7yaa~Ao0ThDC; zjfBj}qHm&?bz!7$Bpi%wG<0D34GvlAtLln^bbUZ@jGkPq`MXb?#3QUZw*7%%XeOJW z!~%O0ciGuW#+`yBb|%T_LRa$w>UibV)3?RNAYr5IPpA+QoCu1;w=zF!2ID9rTtV+j>a0Ca$J zO(3o6+3i7qOghJ6fN|L)sK#RqeK5ZMi;d3ccHxsc=QuFGvz<+M6qEGPU8Z7dQ>8rz zA8Bt+$wbc6^;;51j^U6mjep^HIrTWPoOr?DCb@_yYGpfRhY(ZduZ=`*Htjd8`?IyA zX@Wi0IBOH$zX2fvkdQe8-sAm>pSK_8A~s6ormCFA`oE)~n3*Wau-?WEH!I4kW{z4B z0hxSqwVs5faznU^Ki3BBhJQInXL(C+X2`r8<*dBIUvL1*q~~<|(v`c(dAoyTqRxNR zKEFJ?=11>|BENUwMTGor=N&c5QTyDGe=@?u^{P$Tyv5SUKo;NCr*NS6;rP@MY?xo7 zg$e#p=T$gi(Zvzo64_zbz(~f|AtVs3*i@W!|s9f3_yJ^KO$WnIfqi-B;FX}!GoI)fM(dZ!%F$~}MqV_*G) zNL#}I6uU)5ob2OJn!^j^`cjO<12VrJkU+45mMvf!BK(Ec%B!y>bAD{P-IR#Mj+w(` zynh{_0*C2}mRzJ{+-CdXtxfRw7{;)crfm6FLNx_7Mg@sGDSh+y{rGr3GH5Vy%{ZAP z#`wW6*78I~&Dy(tc>E8Nsg&#x&YgNAB4{OLi-Wc|0Q251qDgi03M<0WGgb_xIOY67 z2A^Shr+5>2dw1(3q|eJQZ`S%jgrYlN&RvuBZDh|?3>n^HS1qvKLvqKzp5hjP-@i4h z-w(rdz_2tSfyi4e1{^zU?xZfR;Uy#?^6exeoK|#^}$wU6@L?iLv z5{+_3p7yRTf6|WTRu-;KMlM$Nb|!{~hDN5hFWJxtP^}LfJt%+NU(3H1B>bD8l9AK@ zl{1C{NSN~sAVBpssK0&9k)r-vy}xHdm7L7X&792aOw62Ftex%cK1Q`8b%8J-YdgCL z15~C7EP??I+1J`I(kz^FIP|{mmGhmQClBXOIwCwKC>L<;qQ%MjqLgPa5E(ck2zbB_ zE?8xwJ-0^@xX+{6$z+%#w0*MVI7>u8qX3_c8{$90pyp;}m?ug{I>x)5`TSFO$d6CL z&#;A2kNyj*tD@bKpu2rHcE_LB5B#@7!1~krS2EYx#NNq_#lpeL{Dj!XdFkCnvmdZ5 zRrl0fA-6c0G~GzjPs7eJy+^?p@5JlCW~fNh%ZBB!ci`tm978kCAhlRhSq zlJMk{6S#dz(Jx>sBpaT!axbTW(j|lCymHd2KUmL?QQbBL^%?#AKFgmIPFyQR(REHR ztIIV`*Eycmz+ZUAZ_!m0{WNv@0N;JNaq9oLF<%%2t-!0tr5ix}8-&M%S$B?tkpIky zdiV)zwu;sBn7WP)Xft1A)wR5s5@hDmJ+2d?N@_Fzz^@IlZ7a5~3hureaFN;Kg~6#Z zis=&XDT#b6v;WCHU1i|dsjDqHn2Y)l)*DWc@c!v5mZHJ9eprY5F))CXFDHoL4dVXL zuKMtDNDldjDF;tFOFCi3w9g0g;ad087()nE7@aN&-wwoIIDO0?=Nj}uB0AFIx=kkH zY#;Uds1~`NEz;xB-W4RJIoVrDjSm&FeZtk|zykR8wsOM^_YNE2GAHbYqbFWUVk_F!lQNz%Qfgt{ood+L zQF}J^e)2^2&|)wDGNId|!z=}uLh?knmrMk`m))}PFaZYf^O4Js`kTUK9JjuI!W>&u z-fQ>qbpzck9i$Ifws!%sGnu{gU9K;Tiw)oxfsQ?mw@s{J3Dag|Y|$nF-S6yq-Z4ia zgO@`#pK%Zgj;u8z_JArFA_9&?5=%BdZBQu& zS!e(j_>)!Q1hnWvAhyO&YmFGkckh`-qv>aDCG?Cy{R0Y1pWNYPt3-Fv#5ONIXRS8r zlT6~N3_~o3*$5bvU}{lr`PY*Cz0XKH>SGM1Qvt}>9E~!*jlY`1r34^v?()yCP{fPw zyZJPF#>^RQ+hJ^?@rDH+N32f+_10XIo(tFHXUXd--0_zcVUVPkQi4YoBgX3C7z>+Z zkI-mL!e73x_(`n{S<3FHE(WK!$k)!EjCdusUURG6tMHrW-WArs)*ixrE)EER2bHZ@ ziw!nJiTVO38Bf$uwHZVpm=0>lWRVOS7d~0+=ep`75k_){zGQrveg;;Jhg~RXsw2ME z_;i{9$fhH#bNt6Cx1ClD#oO+ya8-&)Oc{#XA*pxv!sCCwC3#VUP#1rZuGo7MB1LhO z{K*Un2a_0n7YLZK5(MkOEnnOZ=E6+8hp=U2_W)zQHBs@zqgx{V7@Jb!@huQ4g(=)s z&ETO=zXO=iECa7goh9Fc(%k`59;#Svnn7%3zUq&Ts_mQ~Dhv=>W2-1?3GL9p+HR&B z!N%KhJVvvNm&!sHtCc<3xS2!1n-ZonQ%(=~hR9gG0-T=pQn4Tu>|Ny+Si3J)unA_M zowod3GmJ!;#0b^hYE3K9hx$*~SwzJ~?Fzt-4mm0ds3N$2HW>!~M^r7bufv?PsjjnW z1&?y_rRMV9-!?*|d$6tOBel{RBFmCU=f5)c!yo<-Mz1v&TRj98)I7?CDEsHv{PvtD zUp|}KFN9zE91?@}xG-252pz4pba*&b8G6Fy-U~rnz3)qxLC`0gDzWIpjIL- zMSYGgPQ;*-k!Rf<`fWN!dlZ^P!?P(mI08MOWVGb?i-{n-$a^jQu_ccMdfwj5u8mIi zUtRAl2YR_Ai`PMf&TB<+E{KM-f{FrqIoyU6LWI{;(PmInmuUMK=*~ITUD1P$Go+|N zrbb-RyvIM+NcBm{^;bZ0WuM5u2-ct1woR;k9z$+r^I-F+t^-pwehq~@2*Sn;&lqnF zMvt%a>D`7->9mfT*WTEPcXb;MTJBFS0``NvR+yHPY*y+5JZ+}R+4*BaolHQ;m%;{Z zW1TI_axEqZnu+v%>}g?yrlmu}usg!IfKrJ!6la_mG`6lOKjzdsKm4MwBbMlGtCkGY zE_9ga(qppjltUcdZ0*LFv@I3x2w^&&$~CkeN@)z=sHS?$9__Kv<5H38DO{9QaR6RC zT42hJHvyOBlI);M*)Rx}h8@7jUyMsPmWPQNQUro6Qq@C#OZUVWGsLdk_B8I)zFA2Z zZJfe}|L}X}F+Zvi z+yR0qY&uWt&xs@Ar=QSZ08fnw`bsg;B&8i~y9DQW6knOs`vHqOB4y}`l|4aIHnMHT zwi=P;GlW_+Y?%7yeU?89KM5$k2T}WI1f4b~WQ^vC>E&QlL}B#_6HhM`LyfE1;kpH; ztB3C%iuVicHDA8Hr8~h$hb3>WhvjG{2<^YL$4l7>cLi&xB64TI@(I;x!-Zu-;ABzo z#2xZul?afDRP$#ht8<@NBi<4=v2+{L&L_*k1|qs*#5%_C7Hun{9kMQI{{qQn3wjapplV^L-zv*48kO#lL;#op#ba`qcF?tsb~4Zc4{yzXEli&t{*Gc-(#N_1u$D z?=Z_Z9U!C5^QeZMuUYEfEy>ZLZZhj1)4oy&UuA2uQEsNT9@{5A(+kwkVj}Od@Qf{| z+8|jlU$vdLh%C^8m5{RtqrQCZq7q2u6duQKi6$hfN7+~vpTpR&PHHAXT~iBY+21&n z7L6IDaJxQ3g`8NH^0SyQ&S+%=&CP)7>?&r|smXU42<5G&(q9iN700hqtMKX$`0Fgm zsdJFK?jb-UUyh*S5$DcAHq6Hh{z7O1{!xG@8tR_$hVEc8^@p1T*u@E;*L^CM!1~;V z$>0?u{sw9JsU5`YDEu0I^nR857i7JSt1XjnCr%gq!iQmfDqU<{zz;jz7&yj`GpylE zBlzrsVG~$dsTs<6y1nET*YNwN-$y8Y4^yRD=_KO z1W#3Ip#jcTg?z;Mt+kXl^my$%Z|I!CZ>c$F%n6T1lFw~c@{MiQSU0;e_RN~r)`6RI zbsg4%-^*iOyuj|Klt;htzg|Oh@0h^uWZ+r!Z=LAON6)@yE1tT|zx<=in`4-co+?#m zTTi?P7rijR_QPMt;$2T|>W+#Y?sI)SFo#PKT5PS_nc+~b3$N=FdjS408bN28d|2%= zmgT?8mZTay+-mcdkG|a^WSk*k_E!OHo*Tm`k;WU4q9luVpV<7@qc0ny7&@ZuD zf%?<(0^SMKCt*i!zwapZ1qs$TH58*>p&OW?daKOc1h^6{X@;U3l3#8F#Q?$n3aOc&8FF9gx=9J+N8lv zRNG>X>9Gl9ISyb;;l%)}wz0=w^;*SU{^!Rhu=?-hr+0_FfBXCKmjZT<0r3|k$G{Q+ z7@UI?HypF`MDla7@6B}x7lGHnE8qn%2h0F*9PEO`4rw652g(@y0RFlJF&bN2k4uT9 zAN_g{)CGE8gwsn95HkVI5gI{1%d>34{pIG%&a?e z=gxfJt~#sg*t^bI`$z3(*HKf1g~JB?e}?#{QPR=D&BDQrP3=ENAp&07{`q`m{Or1j9lQ~HPYrwVYAFw=7o9AXH0WCwC0GpBqITpgaiIY$gLF$BIoTNzh8 zQ5(0Ld7}zQzbkUMVo(}=Y;K~sQQewwaXaqWY2cP~aF*T1Cf}?g(S(IDpzn_NSHaHtILDYwxxSQE!zP#Q2$ouegRm52sbAn&@@c6^^xVmUEQiOvDL~vL_YP_O{5ix$8AY@Iem-zx@caNj@@lP?!M&_^f~=kH!AgP ziH&eEmNssmR1sj5o!Z1_3+kW8;_}SWxqkI+aevakYvgI8&c2CgZ0DEFW2=`x8|`Q1 zaZP(VU6GEYMI_;k09b?ZWWJlqY~gZ zDG6+EY4JvHM-mr|kMa?T&CuWfa#Prh(>w&|IsK-0Gc>Qd-2Cx7{RZviJB`N(9=AKH zn}cr1Yy#t@1u?3Hp^n4v}Hf4#6f zti{onjmFcRLsCn`HD1FLlJBALoHPSDpbkKaJQF`A4`qL~py8mV$u>jIN&)Qf#OIxU zJ`>7zUip&8oqIGpw?J0?+ua1ir-y1VuYl;(>5hXsjd)2|)g;4f&6H4eZRbWGqsBJ? z2;hTBRq%cwy?J~39271hk0x=Qx>*&Ka?Q!)`fQmA#pFrA1~5#tER*@ywJ_XlMpU!v zsnggs*44MP(BqoaktE1-sk1i5z7&+3i(sb#A|n?PsfJ$w;yUU3k430Gh>IkqKfe-3^8JFps_#($TZl@YNxE zCKjXO!>hKNz{E_XE?CGgZ?sD2ljL)6{NVRYCpuW9dElXfkmANJl+<|8J9v^D(H>t1 zDC8{;R6pC+`jQ>tAWP-F@p^`yM9VTq|C+ASaUwz0^X-*TVXb~l^gd7ZgSml|$Y37m z{CCwcRzm-3!E=ZZfz*-@Mgw1%p`Ml{N9Drq*mI&hQUU2<`J<&lO|VdAjzTV$`TjU3 zSAjgbtybX0M1Zrm5w1mayXC7^%^<~r{h&TSRO0(wYOdPKJQ=qnAfl^7q**LhPvA_* zkGJMqP*!qkY@pF@w=ax54Tx(P)|J4x0Igvr9)5D=@XEaQSV_Wj&yy$R&HJIM1Ows5n5KYB z4M0O#ri!Xt5tDJ6s#;dYoNZd}_Csdmwr|i+sk2nmH{W$BwFo;%_e*@&RzgjQq`H`M z7((ql$?YdHKE@Nqk-{w%FhN4TWV4yG8fKPCN&|P;L+BUKf-r#P7}uViSvanqR1@}b zKr)Rdl@&XHnqkkYW6$hbd@UdE9Q3?N$x(j3Kr`WzZ7O(_KI$mwsR9r_Lis`AyuK?x zpHGse!9o58Rffl_?L5)6FlYJA8UySdyLvB*HLFfG+aNeG($*?6P`?uk|B9G%{~ z@r!ay`8`ZMrf4?*yY2LvFARP#h?6!~`k72S5Y?Lgq6^`^c*V}Ei%Uf#3+IQdXMpn^aIS54^r~U5B_U@}xb!jXK+=5N z&ZNH?uh~CrIsv`wsidSG)EPoslk}@~IT)gze~^frJlfiAz4i_ID57PwQJ3G!SXpBW z*L^sbHX1$DoCC!qjl2nJqEYwbM$;gJw1C1o6q^>{glIX?zvcO#-Phn^Q|))|4Pfk( zk{zNAG7Y6zzvD`FgCM1BGUNLfL`izbd_7vx<@gagJ~G}wG7hjnDjz0{Xn5^1kXn1% zRZk1^n@j(J{9U;##qXe_^8nM?k{+({?5pF=lmu1u+@q#LU2k3wIF4=FQz6yu!g;b) zyR?;3RHUEA{-&3+&mwt00#{-hzso}^H`}eX%eB9H{3w4nH6mcoLl`k;C41#3DnpSV zGU5@X!=j~b&6m}#lF$8JI6Y3Dg^9Z&Xe4~R{K1LvBxKuj<4lbS?S8F_*9=KHnjX${ zHG0#mEVPi3i_4G)zeo**k%tPbw=RTuW2#5+7XCnTR&NX$3(w0}1ic6lo-T5?l``T| zHg(+N;D)xadLAUL^5C@<;X`zTVCy~C06;B^!mNG0y+H73G+t_(Sy}M5c%kh) z2X=><2A>a~G)|L*+US1K^O*H+FY@e(2x{ta(|2#)F^B{P?!IRqj>$}p$y|~|A*P8s znpsRtZB_*OS$v~AzH zeRBX1*e57=3z%^btCL=6I8WR$H86~&o$&C4C^WB%G zT%MLM9O)@jE<4yGxVQ@jiMiytf|WxKGR{GZP!A_5}5;rUDn zzSq_!g_PL1PpGwx#H@(p4`(4beWfr=si(G<+3g#lUSwr)W1gWl)&1B5EGUlw>*`z~ z4_T~R6@~WCwzCpvf;3p4mq_-Imt}Qv?w+4fcy+8D6V`c1c@1uLf>4;|V# zH$JbY5>Fjd9dO#PHb^x46zG1)ig~Z#c9Xc;hkwuF0CWq-FytayswBF5;i zlnFE)AutHKz3@n<82^2tBx$@Zx;a`eni=kNS>;}9m>xN(olpGx`-1LyJcqD=)m--T z*HwpY9*ubs+YGv1l|HxelgUzt+G7?1yX_`uZ&J7Rxh*{0B)<+HOl*ACkF3U%Dzmrj z4iuxU?3KHzz}Z8YdQy5l8Z)Mr?)-&sz+U%V{Wg&2u14Y%b_K*IMU)kh7YsW{T}?U)ewuzgR9re@2rGw1sm^<*BsnC}8CVG_E_&ly!&j}!0O1XK2`F*mF)?^#5Z)xoMCn!evq0} zrR|dc=X)r=VCh9W3$*VpuIh&+$Yj9tzD{rkbk$Wu!A}mRRr7SFyPRsfBXr;i)AMZ# zUfy7UIWU9AOcu+@V%DQl3S?g7`$YC`Xm+Jckxs2RWtE`n9*_f>BQcY^q&!4ws}3nY zIVb|3nfqhIf@1bPf-TKGr;j+aQRZyU$M{biUfB$}!3rpJVKzVKmxwxIziq4mJ-#l{ zk2JKmP|g!VtE~3(QnZy=aI(bWxnl9pNpd(8ik3L-*O$zx4q$5XzQ6MQjWx@I#slcY zia)Ktqvu_z;JC*Cd>S`eQ$xl9%YCyI%uH+#&-yMf5&fhl!ynz$oS48zA7$hr4}n)H zR6oO(*{Z8yM_WciQlMhvf=>t&Z3Ob$3LayvbPSr=-K#8n#n#4Oqz7dNyuFe`>*4vRuw-r4kWd zhQ+(k)ZBy$!41TiySr@)hn*nV0@}d2j1)}%GuK`-)%|06a+zq(?1Td^iY*ejv{Ejd zHv3`rpWIY9^D(=be9D+AvBc~^30!s)PAt-TJxx84JjIzFLwvn4=SJqk7HT>73RIC; zw~u_fc76gxobi;2Gu*5okzU58^MHB}-%2Mg&K2rvdi6sL*5e2^iYBf?N`l5l3uFry z3MyotL>+E(BNVAHXLPQ(thRJ@P3BsjjUL&PtfBO_xExMg{b(E!FfL5BUVc8@wRO)5 zDjgwr6i-x~GvTX#9_6W45J!!wU(Mu=P9nK_IOG)DLN)^POr8v_-OndyUD*l@F47<# zv<4=p5h5yx>Z{908=_XVc&j}PuLBW8RT8wyYH&%4Pfu^I_?R(mTDW9sZ_}RI<|Gw8 z*OQ^sw2tp3G&Fp=*|}LJig}VaQTj%6oSAY9`#%OOwj{2atlOYgO_o`5AR0S0BrTH` z-c_`}hZx_29SNYfpqf z-@?Y4RNlh;+oMw5H0+K2_n{_r$NR{S2IvWP|4vekYkOkbxEw*Gqxd*&m4}z=Gmdd#{dSNAP9^<~?t)>+o1V41 zR+*nRGm4#Fx(5Z1?9uX)L${YHpg5KdBiU0`6LAyWL^<~e|C)gv(U&Q1isORq4#TJ$a~d-spD9$DV<|1|^N0IxexvV1J6cn0ZsFY~Q`+=Kij4j`8Fjyak*)}A# z*wM^WakhqOyEu)LSvJ1J-LjY_S$*Y%vaF0<%p~u_D=0B`H2DFgLPI@%BU--azy=>7 zvcRlF+yEoyQULVeV6*l6A{wo9p$eY^!MQ*ra`;U&lSJk!e^-vmkHJAq(b6fP0cft3 zU9WC-YZ$1I&Gj?LwDN(y-fIGVIJqg-)?j?A(XP#qnHX7-cqpb&3+}x z66phDuTJ@11H*)&VRP>Vj`pg*-Ad0zua_%L*Sbs$enCaGFjG@tyG^Xgl6YsCqB|0IEgci@pWTLGswxTvj)CS|ELMoE2`?J8gg-w+0@V_gH` zTb=jpiJR0!>3&WX`2rxG*fL~(cFU_F8AJyd#bV|Wf?sGI0!DfYXGi8+t*Mxtuk)Er z_pX98;9t9=rI)IicG^i(+J;U}V2tYNDpq|Y&{EN2QjxinGqUX3OHLLfh0!OfpCpyV znB4!xR+Y-6`}J-Q0Z&>slZq3{z1?I&2&1NMwckkrwCwL8{H|?TZ9`CT%7&qqq+T@4 z=r^kDl5D2z=m}0k4qtkvSRG_1kl2nrb5A$2RXo!$W~9WbU10kSEtvdxf>WyhhSH*G zFY>h$hP4?ne3A0yO{VkDErLB}?Bw&#H}~zmi2Od9-4Qz?_r%X>7wcN@)m+juRt3l# z5k7L`8!%qJ3Lxz?iX#6Ko8Tv{{o9==@Qlp~=ZjPNGs;@03e~j|06_OA5BaYXjYNM- zG%A^RJG#65NjqBFSh>5HxY;;5m>C-zo0#7|=fNNXI_|mpQ2z{nDgRoK;BSIzCNBS1 z&J+NYvE&~@1PnB5Q@-R#U;SIXzh^?#Tr4atTr3>SEL>T^u8t1&ab3tg>=@A1?H$A+ zYV#CUk)Yv++5mJpv-1tAY7EO3lb%frUFP=cOhLSXCD(>Jk^0701m z<8~%PhFCUtRfk0pPsd&?$e-m0|JyBK{^|WInd@ri=wiWYY z=bdCk*{kr8I>z-R{P)IwE$ZL_NYNz;??85w?q?i5tjL^uo9tw|Or(=Dih9f#>t66? zD?cX7A!@n4LItNnR+RZ)E|w?m5mGLOCb}Lr1WH0+RK7J=w!nGj$W!Vu5+1+7c>6&b zmzRj9YO{SiDv$RkcGYH%CBp@wJ#yN#GUYRCj*r2>!tR-XiEiZ%920+49y2bt4W}54 z;5fH}bh7tg*N(ZZGRZCu-e{5XXW&ogc)jFkf|f#2jg3QC0jAgRU%mos4@0#us32MB%2u(>~aVay5vOJb=^JE~gtFhTQSPkjWz9K=H zoXHhsi4DWeu6TxhV-0W_=w>b)uH%SM5x<~`ngV53a5e91VhNPV$1LY8QEK(1Vkh-c z!L!Pl`TX}QY206^_m4mr!Nn*q%w*%HLxDPRpa*DYqkGHdJBuueyi0#!?%J7(=u@-7 z4Bk6L(pfPW!)QXWXk~GqxxyyI=9|s|h$UsvFT%n2`e?bvurc{mLf5QX3x8#QJ*-hY zFWkp~cvP9>-wSt_4_l`MP6R$Mv;(Wdzl&uczjyI`R|QaLt#+sH?wUq}QaWO$9i1P) zy?tJsvqHG&`eZa(de6g}v1d1RQCOKyBON}Lcf3yTgZvW~1Xllacf~3Zn#k}*cpJy~+b=fZxYlxEbb-9xQO zcHw-*WY9)vl{f7YMd8U<8n1_!4n>@IllD`lAd8wv-_i z7^K-jnED?E=zHNM^n-C`OTe?~&b*?`bMdlO+sQsX#!j??#|docv&Lbg*;3SNy57Yx zm3k9$Ss^%u9CXHIVy{Ly*Dm}Fp3v3>!%q;q%D8B7Nk_Nn$JXJ~U6bx&d)E_aW4JIr zRj88UzZN}~neT+Njn^F&d>A@72{sgMNK;>Q%swmiKRkbhUZ2=gU@ueXVAi*5uqoK; zBX@|l!xa^{aPpkgnm(;FT-ty{=bdM1pOt;3zrzbIzx?Pms&S!gfn>S-N=Xey5#4yU z@+u_NnJnx#@@L(Ja&W^841obez1oZNKyUw|GB#?LaZ`wGYgsW9j_Cv8C9TV5QrEiEr zu`*gIM=e%JgKt>T7v?}#{XPk9r2gEaAC_^N@y)AWFe{9va|9p`FK`lhZ|WU3U$B8a zVYeR%tJfOX`VCw$rqxF3-H|pf>*TR`xjGZF=Bt-9P(gvfdk>S8Ym!Zx+*7{Y}K*cYdW-x549dHt$G^PkHP~NORHQaLwIB zXZ$gej`Zr|w?cuvt0kDv((7qtd0s+_;zcg977vC3rGa|^kD<)glkpM-g{Dy-EB$D% z#^9yFvxY@d@cy8hwUAX%B(uZ=uW-i3?S-&8g9xC6v9z93@fHVhxc|~e9Xh5m#qcW? z4L$r!=a;xD+Lt#HposB|8moPeQ zy7@D9a_t!A!Q^Ik(qZoYREJs!2`^TL)E+g6)tY~>*Z$3{By7eF?wCMtj8_>u{8w)D z%k6vO(UFmU!4FQ-nJ$z?QK8-P?w_*r?aCy@e$d0gb;9?+8eq{LUwv6Cbi%mdDKcHn zqLN}knYT7!!;Ld80q&lyn7|F#Rfs{tgpQ^QjKPPY-sS6GxoJ7$y%zd6-}2oAIb1Z9 z88P)ifYgE%*pZcg>PV zvcE!oV9(f>*j`uEp^h`jC*{$~7~GXAhCNNa;oNw=a3`Gn?WQ=%!crt7MoJJfksc2chzoOAD; zqR-abG3kl=kW|lROib6VF_sN-+Xp1WH{6(7VP%{QeETBbSY&e?Qoxik`Y^vwfEmqN z$qM7mE)EdIK9Lu_e^#O@M^rG7%3d?O$u+jb+r(&j@(9*)b1fOJiR9s&uaMI3BaUDiA&Lpxv_`MF?{ z+iBNzON((@iZ&KMz4qesd;+~&YU_gAHh zg@Vrfep^;RJCpWn&w!Eoh}kvi)nuDchEYGFYHfi~&n(;(d5eSy(8ovLGMR)zLeXfj zE!RhVtN3!1`xx9D)KL~Di6#cAAL_bmcR$3_okZuGL^qgB;C;FA6byST z3NVLA@v#*Eum<`^TmCa@)z@VnzBA%s;7yTs829)!o)o*?9fb z?whJvQyfAhL&_{S_TuSt3n)lsbp0^2;67z{6*d5CIk9i9eQ`O`Yl_I*Sj+R9k(7vG z&(!Jw%G&)D@9yY1b(KPGC3X9#DJTbVRBM-kUVAlX{JU?@sQ+RBVaw~SmT{j-lEZ4c z+2{4DCimIE!td|<@={K`-mqRURh$;1m`*BS94oC|AaBHM`L^(2|NJlkCM)CIZq&v7 z?Ss~F#@P$CMTrZx0Is?RrPujJGMIXSIT|Zvryb5ndu#pTC{!=nehQqlp3|Q&9`SnO zc)6A=C&V6k+)y#b#D?C{|nO36xu|c;5AW8Er zaCogRSoaqWBAYx-z^BOytPLVz_X>Fr9NchMh_tiiP+aT5bk&YU#WVOubfu{6Dw7WY zfFl1pC_wlV0qaO>Xv(XqaLsW601;Si7qEZYK>ryx!vF!W|N5}RpCNw?1Mn>V^871~ zR#W`1S$`d#c%hva(s?1C7i9R$o`Y%sy#6)opGPVFsq%Nkc_E{}>^b<)zuW&-`F}X+ zpF%He^TIVR+j=3Qzw9}9?QcT=hmZa#^THP|YytUG{`aofasFpL|HPtys=WB<#Xm28 zdSQ{j>^b=2Zz}&oCjXrO;;k1?y?E@!lYiNB@D=%g`&CU51pm^3@aGzU0RWgNUTXgV DSXxbt literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/general/alternate-endings.gp5 b/test-data/visual-tests/general/alternate-endings.gp5 deleted file mode 100644 index 39c2e6040c3045868492da31f81558d8a92b6505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1598 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/general/song-details.gp5 b/test-data/visual-tests/general/song-details.gp5 deleted file mode 100644 index b3cf0637330db5a9c52e3a3d113d5705dd0633b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 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 b#Fx%y$JWy2#?~Zz-h3NUK+#DcY*xfC0FtYR diff --git a/test-data/visual-tests/guitar-tabs/rhythm.gp b/test-data/visual-tests/guitar-tabs/rhythm.gp new file mode 100644 index 0000000000000000000000000000000000000000..d9366f016ebb7d17e1a9e2e798c76eea4ce62cd0 GIT binary patch literal 9965 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/guitar-tabs/rhythm.gp5 b/test-data/visual-tests/guitar-tabs/rhythm.gp5 deleted file mode 100644 index b8564004459b4486a6a577acfc1a561699f1d337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2136 zcmeHH&2G~`5Z-m#Bn=G>AW%7ghQmfhs6de_;DVgEB{gbD>A&90rgp@N7b>PRy?`_0eJ%-XyD+;#TcU5{#Q*ROcg^cr-$eShnr z&?H$dDon`YviQ5}H$ZoBUI8ofTDNY%Y8P77E8g+#6xB-vr&gkPw z*gtwVCgn7muROQ5=c^~MJgy7|=>-PQsv9 zEbtgso1LS8)Jye1HI<(CAy7j%u@t!_P+B+0g}j)+|2=`}Lc}vz0`t$~WbwOLAO=(P zHRp$&?t9uwVdtw^z|X)>!P{Vd4)1}>U?x6=nNJ`v)6W-W@x`b{@&hKV%+hi;mtQGN zGyL-=fr;NWC|4`p(Igt-u+5`oUVR`T6yoPa2yOR*9sJwTL7q64EAJgH~80i*b7cx}Ha}mFaB~ z6KCN#8w|>UEla0Nx3%muFi}bO{B*?>nXO9?n6k_uTzUzBeBA;ZA|>JYfmo7 b#Fx%y$JWy2#?~Zz-h3NUK+#DcY*xfC0FtYR diff --git a/test-data/visual-tests/guitar-tabs/string-variations.gp b/test-data/visual-tests/guitar-tabs/string-variations.gp new file mode 100644 index 0000000000000000000000000000000000000000..20f0bb0ef393a798c40fe31edf60b33ffc94f013 GIT binary patch literal 9355 zcmaKyWmFwYmxd1~9NgU{xVr?m;O-vu;O;IV!JR;GcefDS-GjS31b3V8&AKyp?#wrD zcdhO&c~{liKf0gYr6}_b5(Dsm3Fc3wsGY5|sjV}U;=g*q0N(2Ur*Qr}{?$vw!q(8y zL&e#{+SJM1)YLg&N5+mo!?nV8kt~{iDUU+gTgp<&QVTD-J0uMt91}Y~8a&{S0qZ(k z(+X42bmZ#xaYik@#4?tj?$sX>CXghg6)uLJRmvZ-8e7YRC7hn11F9xf4of&j4XcxW zvkXYRCvdc?Qy6w)Vkom&-V}X#H|Ex+*C5+t%6S>BGpW8{tyDOe?v#1cW*0 zHVGuE>NPn6v(@+<65mX6J**$Hr$+UefPQ1oGJe3;uj` zHLM=7T)+r3xuNHFpHC)(<10hk#`TY-g9)GZ;g`*7n+E*R-QO0^P3}HSlzDPvDmGLa z070Z#BqtQD#|Mlp<4qKcn*hD2N9QF>-yuq-}RifnY$Rf8s`1O4M`ZkWha>+%oAyVjT$~jzlVRyV-IMmNjTh@jECE>z^|pT z(F3^!R+u*`)KehhyVgO)ZO%{3pM!v|vmctbgYyb2KfnE=-lUw+RelcUaK0zIecB?t z_+=(oEC9u}$3T%As1qi@M%NX{lZEQsCtBzz`n3OnK)@nsb&~tMxd8bBD(h5`SPbF= zg_I}3ZzPF>yn{abA}iL00ecLKJ$Enl0(I7$4!|tW`M8u2w!2TPXZy!r=jJ|;e!M{~ zn+ILTf`v9Ig%Mk2`_#42yPQJcmxWq7*8V4U61Fi42t+F&655%|;@6~4d@jM;+{>3+ zLClB?%C?FsOw%Ncq`+1;9L}lNbG}rE z)rw5^jN{q41>*7t7ef@!F0z5lZ2U9(dlvFUf@OXM!|(3vMtBPAySG{>m0rF;02f4p zw8sq+fM&dLh1jRMk>++QxSUZ_iNd7Of|UNwo5kt3VhE!G3jPh-~AQ=dtZo-Ln;i zZzr+EY$JcCe)nVaAXONGW>DmYE+hN{$VJX*m``|WJ4A!X(;7d-E&OkRg7-MD2mO{2t z^}8JRb@0%~G7W11BQ~k{%k&@k_jn@^JZ6xyRh4FnJI4ZHoNPmkBhb72rUPfRO}6_O zNyssP`g@&T5KKv!(KN#JrFP)~xc zr0h<>aEzj?ijg*LhmyVJh#s!_M_+ovEZNlUFOB!Ac&$VS1zzi`K}Psu?eu9hLDp_0 zHsjyFMd3vfK`v+0bp%$VGMO;yB^Qc*1nx2iQZFF+qX3IhZrs{ZFrD1U#%&^j#L6%7 ztJVNTy)MKPx6~>eRZovJ`W0O?y@r7e7bs zdA(n=&X6;%Y*g?v1XST#RNy(YiR37OKz}zsCD~>{Ad=SkScnMLsae|`m8S04Wigu6 zKAI+77?aQaPEutBjW-0$gvE8SY>>&i=OnIIu2hF1p`Uw8Ow?z;iWJRNod!*IHekgh8AtRtfu6mq@nWa`^=o%S-Vp%BwXf zk66tQ!JPWC9r`hU)!MzCOp%LQ1yuDntFxMDODnA)JCEiP zN5TewruCr_h1~i#P$+q`BPkPiG=jdg$}}uM@=>xN|H$+?f2_p9AUkN=??*WxB0fSI zpc{-g*JX=y?tqQoqQ~*c4i)tXuRUJXV3`RT8y>4890Qob77yVC*P%N0Csdua*HA({ zuxUM!=oUMXKKLJB_!`X?bg_-4UY~5mM=Ky_95)ub`4c$ zP*pPLN@QHo6a}*98+uch5IT!FXN#K4ve%P^S@}$ew z8EaE->Zt&A9`sTE$$dN66aN<4%44n$fKU{QR)xB=fSW!NCALE^$9tE*(0q~hZkL_{ zhYN=&QiYIQ|8dFfgzC}!qWckJhJGOcI}L(n?v=VF4afzFPx?aq#o<^zY8t$u)C z53l4MVA@uw`r|^~Ma=d|u~9WgykZ@+f7G)u`)uy!<14kHry$RyOIUKsmC(q6u`|@J z5B&hfd{|Brq}hyx(6m)lBKvr;E(cc%OSCuRlm{sI>(x|psN}jEJ=%vY-HL_`j>Za> zr1(ikzRhQE*)6%G4*XumXJ%3sx=DsJ>`Us)83x0my?1Whc^BiszQI4RJtuiTsi_fl z6j->7D>e^@uL|P~r9j))lIq3RkeiF|^$e3QF)}#QPm>#IeCq;c7l&JFs9(bknr@io z2KCOiFcKt#lo?-_3HRYvBs4JZUti%l)y?gqH#mqmbu`*u`eMFpDDuEQwW?v>dZJFo zoY^JVVm7015~}n_Q_V;Sd8}e}5=OpHmcR_si0lq({OVqo`pYb)6?BP;Y)L=t!Yotan`K$d^nM;*kQpkW>7Qw@>1&xa+7JeSHxzyL%HQOBy z<#_?C?^NCLJC?vcx%?I{~bb z51NBKhctT~B&B+Vi!vMuV7U^p8vlHdaLpumDt4&I40ruF!2>?+JW{g6qp9m}S7BID z(p7n3k$X4$E`z?CJomTZUv-op>jN~A7zu1U!a^v_XH1&lMsX-Z%pl9qznOxVJ7Kf$Bt4v*7HaU7cAzb^Sju4IB5ULL+`Nu`kU zlaYHbS}M9Uzgssl&V-Fb1MY9O0R0|M8Y;;l3Ep8K$>luvMHd7&$mMEm`x{V$LryeP z0Q*ALtf@*}R_GX<3~?5Eo`6NIKJuNbfdO_cY+UpStxe+9X-nExY$58gc6vkaB#?-> z+qEO3sULMpph^vwR(!o^m-&9MZk}EpqaD4{WWlES zPklJNg_kW1eLeS)Wiw!qVZYmBHSaX&y1kN=o5Ye*(anMCYO?tr&z9qhrdLD2$|eoO zp)nL%oKRW{y(XEgAN>+nI}rt=m12JU8gAJmAgyDL&{*>7{Sj<)d0_GBVXo!5 zi4Vp*Q22ps0NBKB>X=0he$L`zl>5{c(PGf~9glQ7+RxXl0zo?r?fOd4GirfWh@Oq9 zTqYk1JH&Zbyjmv z&AD2_@`wURAJbn~gu}Fy{9(nL9MkeOaa4k-B?rE?7N z?dnQqq!lDsX)-1@sOT?(^+0Yb-V^lI)&XPdNBI@^h^lZRY2%XvTkWaHu-PfRA%g^t zgar-mg5DJ0PnyTq;>XRMh;*l_RSFh!$k`;5hHA*FMI-p3naNk5%D3l_P)~o_mpqsYg!nelNtJI#2b(OrFTImRd@g$guw1F+>J#KxyDV(VzDH$9` zj5@oCKD^i$2V}O$l;$KQ75XZU%`S=4l)#?@2Ry`H4!OxD5KEH5WaaMI)O8ocofN zPaOt#mUc&_D}FIs!;+pMA!1%|`YsG?Onde#stn;;`J4XYOEG(nQgsj^kbjjB4- z7e7a+FWeshGtnSj7w4nmB-=Z{?#et*nPp-pc#ff5nrja*K*}e5&{)t5{Lr<2-z2_h zF)h>Pu5pD{*K+kxaV zBFm;YF2p&23W0;>F(7{_DY4#O3fjYYtmkb`iEU<}?suGq>tKc)e`N;-+`?RaunLc! zO81e+M(uZu;GSe*BTPpO7YJI7@U!rKsbs#wG(E}rI|9l+osLE|tP~o0D4m&m)WFK8-1kYII8rx72Qt<5n1y$FTXw6s@UJaPaJm z`o?-07l!(VLP6+;!w2ShQ1Fu9R957r8vKKz^<-nfoS)h8N13v$2LiMp=&b@1^6iY> zWM(VrcJdQh=_R5HT)_DhaZ0PF?~96)+(UgX5VM ziR`CETlVccJltyfwS+|ZF-M-u7WaZD1n%o?7@bJ+8h3k|{LH`rnqc81PzN;E#H?98 zyFCPyPGwv4H!6K%u5lkn9*S#-u+kaZE_haBp8(}{wzKGtp%Om1NtbVJDz|50!|lx} z8q0dPNW(Hpmio@7K$mG)x+@0S|5+yb}cj0r_CRw;Lg)_X+G zG0s@d&do9r?(6a^>DmA@uE0D$UG9`fHO8u9;@Xp}Yd zuyb+#lXe7Kn7KF_I$PM;8XFiG7@FL@WY+&Ze4wG zoaQtji9GTlC$(6mV8H&xbb50#%=QCj5pSvfqt5Tu=Tk1SdoOASSkrfMTGkeMvD^0} z5#luicEWM~hDN@Sk3_wFzN<2&O8HOPQB9g>n(5O3r6R3NPC+dWewmnn3i!nThT@ zX$dosiF%qml74yQ*ka^}{NyVraPaBY?{y1#N|7A#aHM}YOvQ0@KRE4Uiz*R%_B7$R z*^Y>CDemd>M5wfBoH`rh9%`+OX&lz&HNTlwx{=l>_s!>z1Ga@b5MXC_Un{->LoGm@ zCfitRNU#(Bjs}r+b`iMc=0mMTqq0ajZXtcd-9%G6YSYk2yvxAVH=CWnDPS{Motzb61*tskC#tXB=+oNpy zsCmDA_;U0!?$<9lFrVtwIEwuvThE^C!HvN#Q!pVrH9E}L_)rSno{LK(aCXUa>%M0q zh;2la_toQ#f^;#uJR6`ue>r8mOn2kshns$=cd6(8o|1|L7FcwcMAjxAsJN3ca$)0n zU2L81!r;|gnY?`X-)3`rbJ(BFNKDN^K?G0q<4o+p48Nhli%A;);=mmvXtQtgT0mN{h!f~c@e!J98fi* zu}}+Z_k-li8i$$6z6kDt@kRFRu&{8AjbgJkFW1@x@gEp#v3Gfg)2DvgMx~XSTQ(Y@ z8aAi3UXpThsG;f>E@p&U z#D~UBU|r^D?d%WL%P>&*dzO8uy4jOtvA7SY=nMb~xw#0psvF$TQ6e3PWl~7{ck2ZO z#d)wMu>t4UP&pXT9vpai3SZ%i27?yUm^B^rO43u~LGw7Zj~P1;4GslS#<~dQ)IfYu z6~s=20DLjw^~)Bj3Y$CE_0lbDj`!tXh8ZVi8k=WFL&gbryMIM}-J%1C?>^pMg=AXt zU)gr3f2OI0e*HB~R<-z;@v-uu{MTz^$x6%R%6&vvoVB^fwQ}@$b2^3GN}&o>Zg!Dh zZb|BN+4qJrZSDa(i`kND3mx24eWe37_XO2TObb})$$`fr|6(7yUTYRoW_8r*Ie&dl zyYx}q29cb>YbLA!;*v&G2I0zzk`19ZBI*i36*#}&Neq)MLXL!wuSt_9 zd~}LVZBnI4hB$Jf;UqR4%u6NRx=G;a-TfSd)4&@DPOIMWNl>KeZCO64-m?X#H+q*q z)9fy%$lBXeFVK^@N>hKui#_NqCd0m_8EmatmP+vuyw;<=Q8FUJ;i)eqdSoy3|H?p& zmKE{+-F0HZ4vu*E!o1t4ZvFSbc}OSUL4q4k0sLI5F2oG9VsJ~cQ&zwZ%%D&@8fkH? z!$$X7_RKbsmb|mHR-N?M%s5dsnuD0Ck4$h+k~m}R80vP$m0D2ZrcOs}9QawU4mFeo z=Lsr2pEcu^B0pQ#I%T>2{`ng&UQA$4hs90R^=|Rgv8o1Qd1HF^bqUWCUtDsn;I(Kf zkFuH)_Qn1DLoT^Pe`ThBHxzNC&fG7;6$FC5OZ}HFJQX+4=OQ|~Y@YLC8bV5!ggESo z1m2M%jt+q9|CO7>aBxyj+u%q#G3@OF0yzBs_Ad%SO4f+HVp;&Jw(jjsL zdMh3IWq-=cu+AAkm&9=o?1C9jjVK&SklRQd)k)PnrxB=uNi0HeKQEMJ<72l_?AJS+Ql!x&NuwYyRjV36IM!k$G4S-L5-nw04`oEW z!Yt>$4DFt%7(k{^ab4%i~&CZrz9{R7c4dbn#t8UmuqI|LDF zBpkK~m#}VA&Kzt_kREv=M+}B;D=sQZ;7y9 z5X;80w%61jHA2h5+>(mS4_F`MmB;;%cmB3-&rg!h$)l{565Tr5lfNhFwp-DqO7Xjw zAp~f#qZn;yxYYsd`{o*AEYJ@M3G7_*@jiV%Bdg%btD`$lXNKQv;P8z2PY_nlo-ht#rhZjK+ONO*=6CIT~QXrNU z%5$;`@imDmP{$E#oDu$npziALl@Hdj*g}P99FQ?ff*;!H6B!GdXr$PlN2Sc)BSQAk zqF_|2`4I$3UNL_k9LVS+IfL~l%WU00tUUz!o8@2UT)xCTtU7*pmzO$_S(R9m4Now~%#s9+_mDWkd5TVZkKxr}NLZO(e((wB8>TJVT0&#lkC4C9{@@E8(h z^k}Nd5v8M?4WOeo&H-iCPRbszX4?Rhs}3ZKkHDa|EusBKpqN>I!2U5j$_gQL zPO~6{m0f@K{s}w^G%r$5XB!~<EW z%EC6yS%yt77}^28Jxuvh!da$0Nt@zpi)6J&EHh$^t-;MXB<-@(DeCAGz8Kqmu`1nj zzN&ZF{0RSEjmnIOh&zIIr6U0z@*bIl_wS~14c@gX4ubiKxbmkJJ zz4BG1*U1Jv%IX=6eJ-}DZOa2(N*gF=55=o0=)XZ5u6UPeR{EC6E!9_4gt|C2YaStY zHr1P!MRQ%MruH?}GR~ev8t7@!rUx6W_(EP@uW?$>A8|YQ=ux%dR+WbD2q%^c0_(UC zT%8E3nxm19M~zn&SZB?mo%{5;(Clm=kA{>zP-a&o4CaPcW*)NL&C*RZ_9hvcXOowI z3pY3TCF&he^;bT1_@US6Q2GLS&&sN027LqrR}y&VBaYUhc)8snf3H`5-&GQpH}6R{ zqYzBcSCR4k3J_kp(OV&||U2I!PxTP*+JZDepJ@hHIZH*{5wlBeQY_?}DZKw>! zz8s)weUJ(LvGcmR{R+3;1ibtA`&IsQ`6Cp-tMJ?PFO*S~`Oi^*?O%BV&NtY6gU&Z<`%A9@lz(pj8uicJ zEdO-*J7vDX>0f#c`1AYxzg+$gRQ;#X8(zMl<=e8}p!6@j2CVj1Fzv1woF542y4P~U6ot@Xtj%QYW^4_rzodXYs6DP1daJ?~{zj?K@tregXU6lxz z)oJ&4(;p~$iRX22C4BH}o#DFFO{6UrIKj~YyGI)4Pxi#Nja!phUf}ov6L!|o-eklc zqM~=4q_Ye@T>v{Cd;7i+juu%oErg?q@7QbuEuRX@7jUI4JcPw#w0LAEXBTO7@;L`) zkKK=+Gdv8~Th#1Y^Er5=$-v_oPtW-b`ryPlPvbC;k~o~hmAB8QiGS(C|#_^(HP29KAHrmdI)b0aToD5Vjpo6@i`*pKu9M7BEffiTl*?lLFswZjat3Y zY?N-EY!~kg@&gi-=1n$DZFtS;NW-81XE^WT5&%+3`jBhTLF&4}15 zGfwV&j=U5w2nxXe&mjJE3fb8@o7g(j%l}6d1i;_E|JN}7y!4E!`j5j z+{DDWL`%vVN6od`_7`y+%|jsFxss;#CL^D+W_G_){ z?hX}ea%e3iz2*1K+4kdHHRtTJ+pJD{i8fimR%C=x4Id<7Tz2*AQQNd8Fk5a*mo5K` z_AQpk$~eE9G(T4IT=O^~z6*R2yb6xk`(K{aE<&?0-DL`ArM@UNW%bx(0a-|Ke4Y$A z{WOki6kerD@G}3so4G2y+TOKd2GKf2|6pP?fo*<$hJ5M^JR{mK|;co)j@J-z>OgQ z()SxdLVbOEB8cR%>?h`f_#h0hQNd;%_3+Pp9|B$M5QuUn{=s2T>etoY?g8HgDZmvQ z;mI4Fu5nuPT-b)%HV!aw)1v-7z9zTTma;&xPd2Bm_!-9P{7U@%ae#ZbV8&O$3&wm* zOIj4D70Js?JrMXKAJKV4sLWC5wC=-AlDpm8q}~VCBc{tOP&0yHA2=ugJo!xetgRS8&(<>A(eFnN4O{ z^g-1LMI-ocHh$Bu^+sx@(GL~^<{45zSSuhnq#KuCp=o;DE@6ipoA(DKM@F(Hpb_nJ z2L(D?jtxS*5kSO#RJ}g*&p$UV1>r&{gQ0lblO77wmGOO^){iHY8HcjqSo^ba>#&(; zYFPvGT_wL0mio>}d?CYc1uhAK8DQ5HZRM5dmk8(xfx6u=*cQKUxw9O$Yw}ofFIHC9 z@vGll3=ljAh{y5@uy5>N8A(!cHhJU>(%p9rvE+7tKWiY=dieqYumdJbdVJtLYuDTj)xA=Od)css+%i%sp5a*@DsD6S6j~_A;psv ztfw0{o5c+YvAZ+}d4H4hjTI@KxyphkIWur4G@lKQT_=Wh#nuB9vX%HL+#V^{WQEy^ z5qs<-E>Ykrn`Ub~kyqNy#>u&9K5`eYuWRT<$>P4Rb3*-4eu0u2XbQy zZ+ap$v4`lWE1NP_t{+c-$4fvK;GI`|nrhVsaA#yo<{}%P&M+|-NWfbu``yp_I(X=! znM8J(!geV6OO2lT4|&7jyyucI*Hz|;Iwt@@IN639MI#UREd?%X8Xu0(5s;t&=^poc z0ZNd9GEV?IVd@vaH7&)0&267Q8rNM)3%Z@Su_kfqjaRL^9T=cs1=)Q>7!y&>WwDuf zP950z14kBrhY*~$$z2YA)gzab)f~qmk1&+NpW)XBx}sCh18p_|>4;JPta{-!m?5pI zqoc|`B4g<~r-ABh8OcdrAzpl5P$N>t>c%@Q_1fJIHpCY0rOBoYwss@1nN3fL#frfL z*({*$3#`eaH>T6cC=(I^`ppnXu@2{t091kSf}Z|YZC*6ulOaqZ4Dr=GXQ(( zmQ{zL?CFsWpEoBo#lh}p#8Y}i3M| zlvZ0q=?w@mXYp7e9c;YoIgja8B++M*rjJ}}jIAVJKx)YfqnV8nwR`TtXFq%F}{i)j5)=9 zFZg@OwzYdNv#eq!>av)dufr?QYUlCPW7BGTT=p1G*=NX^knxPQ!EhUTn@`AM9DMIr zX=xW|Pas)s!d1ssK%YYXSv*wYR7b!0Zp+9gud?obeSQa3WvvxR|M_a_ROEPD_6QPQ z__Kd2se(5PoFaZ-J7`F^RO>njHyI;*OP~uGHglqL zA7s)24Teuagpfy6UJ3nJ?6Ix`kKFce<*DJ`cdOWpAY~#cKn!;x4~)u#3#piybyzWq zivU8?cwY~bCLPP?F9&R$(e`x~KS~kT zKt*If+z-P%v7f`NJXV_kV9Fzq>JX3CF>|J3g^y@txL!)uJMXfAf76g+uw&rGDB+Um zzHhi)(!HL9-+p0_7`i?Wy&HFrL0SSG>oH73Wh6#rYzjf+kVafAZNw*c$S04?LmTCV z-HYaU!)+y($1i_t&$L}+PziO>2Ja#URp8{0_4myj_V-P7o;q|Li~{%#af!bGEZOqc zi>x=@#UEZ)7}m2U$v1)f$9@X1tQ76Pe^VHE^8J{1iOk4+;Ga4*at8bDLoH-;!f3^iCSW-z!t)V(Te!7TpgSL`7U!f>UipW!5?mjBDWYZ~Fq z+r6}q{vO}KR0Cf|sQp8gOPx+y_?SvQ&fCJe+FdLo&kwWJtnbDh+ap%RHD0T9@vU}8h7#!an=#Iqjwj=xXAkK45Ob-W zKz7%{MuvmBGTR0G!G|BFI&a5rRi=2o8XYrABl*@7%GctIiO%Lu0M_uQoxz?H>cbA= z62k)JxsEuH?5Sw&ep`BC>!AD68=J&6eRF!CHM5l`5BnRwf5F}exBfd%P=Ek+hV`M~w#)}oNL zGV*Ip;-xO9faYeHNy&@E#EZr{#?t&|5q{1}l@$-V00kW14Z*iMXb_lN%aiTNp9SVn zvg6yvGAnS9MFsed39j=UUG>5uS-z(|FZjWih@wd)>SfpjN$wn%3kT+Ym_`@bGxseR z$j9srs#&PPxI34lSMumf-#wwb{^c3`Tf;eXV%NW|+LloaFSo#4qsl#cX3eeFrLyo%^@_)}zk&FZdz?Sb^%q6z1ts>m-|ph|lx<9-e&Ju1MU(3Ea~ zW+rUOG>$6MYL|_(A9QuH7LzW*o=|*B?tTSjesw9BFZZB5h^3nnx;Ce<`rL6;wcPE| zRzsQ$X2>ipwLUnAc2wU}K=q@W!8)|ORd4>jT)jS(Q(xs+0(g<-7?}KBwB}wpav=oZ z{KG3ih*G(naJ}ZzSnv+ZQu3Ue`b`LPk79dYkas(u#B-e#5St@HbXW-^VYFv}!k2?B1mCH-c)Zd9nI>^ z$Dn={yZ#!Cy{b#8pSMJZFE~&*Ood0jfXR-;*L12uAt zStK|Z9s3|4H2Q+arQOF2Wei@u=@g*d4D?w?mm8{%6A6|pm|hqbRJOJ2Z%?hqI3oEK z7u!%?U@A8!-p7AkRu4>%xhFLh3RerYHR1OJZ_b2A8ZWJ+QYMdwL{lvBYtF}e&?2CY z@Jz8-Ug?U;)c37~L*sW_k?CErIZmh>Q>wm{Yk)Kv1_UCl6+wD2XPeKFtdOvcSg@e1 zvWT3c4R!I}b_?!k2?Ppb0u3r9S`tuv8jE0} zx-i!L{w?rI9R`i_!NH?g(4*;`JTSPkx>F}!d^CfTv8(lVtqV`P6(WTtm(}G1DIswR zIyl$Fowg!8L4&~TG*ayziKg~ub1di^7E;DoCs>p@OyJ)?FY4+Q{=4$d7cgkAvb(z0 z^;;m8p7@lI2150Tv&qGG zu9uk!3ZT)7h8cM&+>dZqNfdkef@BJDZ9y9zTn>kcV4`+{fexOS9|J$VFo&6!atn#G zx{EoM%2Gx3jR%HF)9D}O@_cmV&p3sqiYy3Q5jb>yYn!-1{)PxTKF6{sQ=os{*Qp45 z8l)hDB|TV_Lt|+P_rmSx3jqz$5hxYEU3KzY7ZRfPQWwj>blZCN>_%nrU~7y+bP;)<*ijnuOm-xNPDm)qokQ@bB}THm9a^jT^ONPI00R&5BnkZvT#1 zSs8aOX~&h067gfJ&1CGHfC^)qx(33;_u#|vhYB&V)JL``v^A>s`GEegW)d|th0TmP zaAft};MhJ7ABEI5Q;iL0Qr45&JU@Cg*!PG%rYIa)Ran zLq++u`JM4bV=BKL17ZqQlpja}Yu8sSz;~Td-PKnZXGj;!Y-phL6C6A!sZ4 zSTj(W`tn5)P317GGbqshHNss)Soe0`G+l4_V89F5CNhkKX1kgOZ7^j87+J#Cwx`r1l%{6@b`D2r;weR{X z0?$yE7z(L&`_h-mu?gEiX;Ky&st^VFgcyu;XzNu?lACWr+*jW zYop+r#ExMsChvq=fbfgtl)Q&Rq@zMxiK}HamztCh^z!qIh{jM=-Y~L{OT@BvZ&hee zVK{z=c@qyBL!>Z|tm=4H(+*1oRD?_Snf9JwhY70nsAZcTg(q(n5{vc;{GaQL*#A;zls53Nb8-Gtbu_gw zb8$3qwy?7`(%08FFn);x!SDwFkSohCLi-aB`)B)~6*2!sQQpAuzw4O+0I``O=z}m~ zX51zcuto#m7lU4~{~3k)zv}*LMO5C=#MH#m#Ma2fiO$l=&ekTT7ixe3VPxm%H^exJ zaS|P`e_P(8Ca?q@%PI<`k6Z0pfB)tC?WdLihY`#jSg&Atnyw)64e*F07}ki!xGh+) z;$CmTkR0dvf<%Yuw76zFtcphqq-!zr7tA&1{AO-I1kHeg=7XC?JE>U0o zE@~ahXnGep+YMefyFui>KZhUizn%ipAMZa!T_+FO=q< z^sM!8C#f#UT-S5RUYFK93pp>X+}wzbwUfSb>w3|Az(d`gVV~#8pFof#6i~tO`WP}= z@=MsSlT#B@p7ZN|pJt{-=ohc4=UrT>+YfPwuF`IXoO0K(==}%dH!r=SVrKYPw%d!f zwKV7E_A6Rj@!)zlQ6jeSVc**7c)9#Gj(VxFg#FHD%ooyyEJyCbJuHeM$}neba2qi? zx&}KBRUZ6I-fcl_i+DKIiF=;b9eAPFUetBBCl_|#U0pwV`M!@|-3~B`2Q%`WHaz>k z-&RkmMjQAOh6gom-`q32on5a$Q}L^E=^C+z0UM z86%$et+A#q=GRdY#mty-Fvb{7U$$=Za!q7`Kk{}lGHQ_Z$pPTFM7!rR@VkCtfYv&V zi7-7#@9^PGf1@|hKKRW)SD@}9``M(7rTv~ zAZl`Wu$ZQPzTL+?ufV*YsD0r2IGBarA80+TwSK{WX)GKIxPRj!cYIYny(@qzuFuAv zPs6-l-kw;;!fbc~%`+F=uW{+NurYU$PjW(TzRrHW`fZCo!`mXXH3}!j;0Fl<4JVdl ze_&>FuhqPI8wPxE#=oHbO;U1-FOyPXYk3HSw=$~r_+V9|aKeolXu zo#XpY$U`G|e5rZ(O(5QU9qiD3osn>SJNhyAd{ZOuE)LtZ`VBv)t-pVNy-qH__-%i& z^|VXN7lAmTFCz>VH8vsUnab$z^lzK5A%`mw`+S^%yZ_eP6EiXZ&x=-b zLyT6g>tx0!gAR=t2O7`*-f%H!`LcdEo zFKU!a4T80MFkjH%u(JEm${SOUzJed8byUn6Yz#>5x~0~y(-YLA zY07D|ZmaC(cY4?GdCuNDL7Z?E4}u1T%otc6yU?3jh~JNo#WB7Co=NSYt)l8G_A+m5 z@TiERK&goCFnR!@PQF=-1n(hD3}4{(TshkNH+;o!AQJ9t9hP}NqRX9!5<5K|FUG;$ zUt5?nx0+FQV4jjH9@=iKJw>m*kMAmXy6UdO-qBg&Iy%+?w=MEohYimb$2 zV$>!*uoekfmQLacb3L71fq@^VjY$IbA?b@=24F^t8R3WqyaN$2V#c!!nUFlB3gyA- z_bm1eqHXB5LXe|bMp!SvK&D2D0sUMsS)I*5f1}7HKF$^m)on8>GkY*(n}v$fd(0Av z{T|ST)W7hBd_-F5bN436AqLUjn(KokOAX_59H@lOs*`qpp0C4CWAByI!CtJBR1Y=x zbvje`qhmnWGNy+Ne_a7VUhci6QPuzW;bniRK%qgVRU*xzc*Nr*fUl z!r2*^rwP~yG$>Kmk3yl>1_I>g$%;LWH9YWKR=p5~T2>z+PAeg%LW%kUnFOKB+N7v2 z%64p$uoyzKXav=Zh1?YKS}R8$9qdS|Cyrd|lCSMYX>NlLPoSmfoiM7tI6Afm_GLAu zw{i9!aQ$!DZ#=cbyl8Oi<0F#{2tLroc{BJ2c!s9=BFh@FNQ4=GvA$%2*Pe^!MU&#F!f=VLSa|PEzRZWQ2oA1$Ka_Z*bV8_ zV!{N@$7Jtt?z2Oo-10*q#S_0Xe&IEfaYK8ruF8{~1{p&!kbx-~AW0F?ZF*v* z=zU;@dZ*fl@eu9IC>1j_;2|@voe-@s5`$$uw>EbdDzoOG@7&#lWEkQpK8%0vK zae^rYkcG0>8f2d=q<3EP;2=0A*(tJr@)l0Sn{LsFILhBAV4Y9#CJ0cel}fs5#Q*GL zx^RRYg(_p3Gq~KW%qIcWAns)bDuRPkHu=DSL?K=aEz~CYc>O zOlIrQkAiDT(|A%MD`(>*CLQC~I_<+5K0KE%hhzNfIlh(08NQlAD^FAD7P@csK*Igm zki9+aYj;{Ro*swq+TYk}KO7u3@P(NL2t5py1SClLf5G|K+Sj4>pKbg;n;@#GS!nNw zaZ%$^Yjtw@(}dJqP5fBjo=;)N)ggoOjm>*EH_$YbgX?m2 z0oc~)dDse9a$;$ryvP;e(Y|GE*JHBG_FXfn6DN)_P)Z02N^; z13+7fBa}bRLg{D~guJhxGVNJUBvB+BHt~n|22V7OuVR0=wRUw%ZDvK5+TD{!{ZMPw zskuTmx0IhboPsZn?a`5|@;|t?MOk}r%NQ6++Rj9K@WKwMv=2zxNA6TO5W&%J2LpfU zsP!g}k>)-Jjgx@~2H6fxhs(e@14gua?5YiFh01&x2;zNL^32&U&0RoPCD3drP?F2w zof~pp(V_mdTlMp8`*JGkMbgog(cT4oMd^+|^$TO~uZ(J&2%1r`t?JxppYU=`LB*|r z;(!!aif7~R*leG8Y@1NK(T^oRX_)VE1mrrj>A-F3hOah#oAZFq;ll5@FZk0O@ix`C z@;Z}79+s@OC2?zUgcI3`&XmsL+b-HGs(sczx&MTt|Z>zXA?Xs=$EaM-xne;><&5 z&{T5T#dc@&m7(gWc$|lLiM%ReCDoXq=!jc^RF3myvRNHXVlgGy3p16>r$Qgho#zMf zRCJQKje_6}5h%cEr>C85x?N-YphS}1h&n_q<|PbAxO}X(fJdusguVRc=Y00sbM40H zhWs3TWNgJUlT9Vq#gk-6m3>z1y2U%ZKC%rP_;M;hsTO&i_fHu zZA(w3^?&K+64I-GhI)Ip$Q0(WcLE4&@Tsm6cx4f}wpo2dI2Ay9YA3!VG^~Ae+ZVLj znB^|h*F$o3fnM|QpOpD?2bP%#z0`>7!=$=wG?KznB)yoF4rDwp?wmV+F>~c{8OVa zGx&m|!nrtj-p5pi>*{PJbDbQM0oJiP<5jRc7%jt}l zJ#=#15F?4Ejya}}M^8xx2bUNHCwiI(Ayawm6;w3+mOGm$e6}XcV)OKoL9XJ}MU!o@ zm}C4A4PJHUawLCg2u2dGg1O|1AVNp=0xD5Y`+}r5uPc9IKBaWo%+WC1%=lUxtCC)S(NU5gs-OkF9q%Wp)p|o-V@|9dd!|e!4!KONs zKa_{u^w<<*OSVIU!Mix>ok7dc(@V%u$P-pTpEtu&Q>s3-vhAq1iH+7QOj*DB(%%srn!>i7a52kg{nDOc;Uy!sfIVYY@z z%x?C|;oeYu(rDBkw>tzA^I^xvd7NP9U;~8E5uVAfb zEFfhc?jDZj2wa(^p+mUwiB^UyL zzxf?vs_ho)H?heNSeE zWXepU0!g&dj@aPOHwC2CA*6s%fkXnh-JV>O_*&fu(^C9|Mrl>zd6U{c*OK83Tu5LN z^?uZ^#=)~$1Lj>^G`x6k8$qhnTwe0#sk-IlrH0hIUe)nYfu%+SGx$(Dp^2L+C#(0VlCbNdH29o9WHNXsTx8`jvETB=CixvxY+d72D& zqt2GjW)I+C{aN$$GcvCbgX3E7zz2RbIM^9~n5f%t)Ri;q`m)|c&Sg-w+Jr5aD|*`lvni{PX_v`wPD=2*LSSa(ZB z1W`qL_ef8L;-;>HJ*x`6SVoS)F(<89Q!U%VKW`y%3T>r0u2JMvj#5pGymYBZT@m3H zIp|kct1?Yby`o+S)8dS33bpq6HI}!(?6yyHro|COn8KMbDWtWnOY}p-IxWfFSuy@5 z1Y{Z>1|0mWqlz|(d5G4#Cub-m#TZ(L7<~-JjVT|NdS}nk0-N3)_l1EL*X7NgddvcL z-JPA8s5OgLCTIfiI~X6>*~)#y6U7y+)FeAX63-UYtIA+Tv0O;$!*KWdkS0>#l^7AJ zX$H?!?hYLQ|BFM5MpR8dNBXEgkbY&+nXdueE`!)RM%#m4qB8@AlHNzc@_y)gZl8I0 zSdOmr?TOO&pyD>VyV=FkK=VzI_01lKhHS<4eA%2Qd+`Nc20BWkZP@hHt(Ss~h*@m+ zu81v+-X0WPO}YE5WUQY55M|N}zIIwFVUSkC@@<@d@4$w{cAd$r&dNC7S^XxgN4TWs zL+}El!h?9LAV*0-@CK?TfS$l3Wmf8=RfHUx{-nR(Vf~%m$3DR)|HhA=*_zm|{)ux? zml*eR&$dNSc^3FN^}b6EFT8o@wlCLxH^^#sRdgqWxfRGMl3YV+v3N{%aiJLKL5U&c ztIQ}Dd+yT(kUPmEDT)IF1F~dh@ZG`yG!%V7!W;tuE8ujaafj1|ycYG!=ScnoaR|-p zlw=mR(njKrNGdWaNt>c&LRW7KbRJq9ho|M*(FhZ-ew4mZZO`XsbNIt3-Rzv0k=}#) z7VFfCiVO0VB4xI?zZx>MBw{3XubNUfkF;bTKc#561&TEu>Q_j&rafc&iD$^!fmAVc z5620MAE-WZAo1H*2?Kr-{>3niCnl=+RumCM8>~-1XBS(w~Wt|*;$AXv{2M($QI3l3N@d<{};^X5jE!&^0>qYk7yDL7(q!( z)?I+A-#}8?!}36Ll`gd*>I^M&Tj;j0uW>PwR=(a1`xOLdFn9f3R2IgT*^05@b;4a| zx>*u*?glhVdB_S$u6E>tS}LOx?wr1=e}etKuesjMi}X{H0V@LEeVQtK!Yu3^*1-T@ z6BYUr(>`C5W;^g5XfOY9;hw3D2Kq63+@K@5Lc8L5#~MN!=DF2{fzw1Rcl^YB?{L8J zkE<&G<93<`Ke0poJ$j5w+CwLbBfq;2MLoVFTl%K$>5tNe&(z72M6w+Y-(A|VOAPSn zj;5&`#PmgoJnFGqYfy54AZEs{aU>F;aZ+big4oqFQ_7jIQe*N1i4?Iws5&h|LVEdH zv*~y~m&u2gF~{SIz4e!71X4ata{L$oY21xRhqrk|#oN_b%bY-F9hV%9Fx=#ddpJ3m zyUr#9yAapud88?A8=uaS=&~OOUfymT}v!l8O-K%`3pot%1L_91v$s7-g(TjPd zKzoHabX050j@^fkay3nUR=r7d3qlyiZMe$Rm--*pTJ!1p0p|Ls+3HPElWml>d7dVp zAA;5C6M05oHe%m!_5EGj7n79L0N~P1DPeF zuw#QR9d@CtTGE>Eh1t3-pUSr z{of9$-`JyfvL6jmfdkM1FP+7&j7@Zhk_b+w( z^xXHLJ)Mr<(5k@|Q&+{z^k{cH>l~EXIzqrhy8%2CzUrlb6uQ{EYQ`U(ZPJ%pbrU1I zIcg4b3qJp&F2x8kkbC>iVEtPR9kDj=^D-|@?fCiln`8#yg{Hsvi&gXW6>O}ZN~(89 zEW-MNbFWxmvIx}I?(sQ8nC%34R}@|Mfj!S!xgbrKC0!!Yl}kbta3*!pm* z5lHK#&ekf=j|aqT!2Dy5scvJLU0gkv=Q}mJxJITK$FT;Ta(mMqG>Yq3<_q!RnS#br zyqA?fyeq?@&Im-NJgW*G(ZY6k-ABAFGgiOj-_S#uC2XYUl@-eh6XDxANbwgUq40^8 z&-}g3{l>@>G|2H2HA3SAJ0b8Rv|;v~s8*CNu{X+ufnVX>^4S?-Pu_YS16Ms|&Qist zBtsY0&5P1J)}{7QBNge961Nqt#dj|kKuG*Zs{Uh4Y23oLldX~LPGIlLS%-R5~Q8+ z<-dM;0J)4L`a=nyR+R*H^?0V97DXJ*!gfGBZ#nGJQt<9^xW|1XS1E(3AhSRQU)|1+ zCL8W8BP!+l^*8W{ikZrH>GL(vq;F>#G2ogTy5C3gE9|3&I7_1e))tPfn_Q1Y7a62kaj2%(pLlJ!-$~%2tMW?>eg!!sZ8=$W z>T$?}E`vCKx|Meo!YlOCV0J+K0=CcBBN4?P?hxzcME-z4klshUnGT?1Y@5F}uOpkn z4?8ca& zr_=@Ro2wxkuKM-w`@6tcj-~hj-^8rmoNR(!$P2(Iu8^>xVR{*$DmDQ? zDO8+I)Eu`o6Kx6G^fOxdrbxNiQhYh#SBAo6fNS`Y(x1X58KI1*rkQ9nn5K+KW+)4; z1#mHJ!b*lhb%5$Mv5sIzv@_@_)dCl@rIxu@MEvnt6dV7ki^aj{Ja~DAZak&tWU&$; zInsNc^wL6c5ycR8N*c!zX}}#*Sr?7G?q0GQ$V6rK-A{fG8;viuE(q=hDJqQ!GWm#^ z(_lJz-#$t{1PZ>xWPGS(zN2J5R0ASBbV)&LilaS(2>YTTBQc3!d{R6iNg^D|TXjXG zJqd|}WrBftq&Q+y#MET4cK>ku(jg-miC}h8JSRz_P0IT=CA2-+j51OaLe}x+B%)|a zY7hUh|8k7xG(fmba9<^hv?=|zkk$xhG{G~P_!E}*8;EEi2P%#W74b^heX}CmzHHz? zR>U0RIQD=jy5a^y3DH2B)Qv_>xJ_x#q3plKDrH4N82#iPQ5L~an#NsH`J>{oSrKVp zHgO=UGB$PiD}!jW;%=#wY9O5|j!^}1MA-@4MJ1R^1<&p0Ur(D7>Yi-OXig@Cn^5RFk|zkfDZD1dg8H%4rFD5xmfYsEdLC-T`DCTNXLp}WJMfVas+qz<8i@r zJNx7La}m(@WOGJyIw0K6{)j~}l+GAQ>jX1C{t-KNFhlXuEM1IJIXncy7HGqPzFWvD zs!J6%wMfwrpklA=n)peG3)_~FqVk&%izp{cgI2MzWx{(x75=ufy7n%pQbx7xFy6S1 zDxc^sNhrH(kcfvb<}sKiZVz~oUa=WvFoCY4pz>$v2NNTI{|?B+Tng?7lO*82c!+(9 zVV`J}6i54`pbI$zsy-Gan6R(ktkG##%DZY&?E9-*I>fYvP<`q;-KZl zC`uEOh_J;dNO~gFH37*OBfE_Aly<%WL>(HG!3~a@!k^_KLuxYoP`aq|eBNj(Mt!2x z00=o8ztO1+^OgkxDm4*ti_wtuT;xT;D;)gQ8c)S132hL0s!@S7lOoFrtK)AhCpxf@ z_K0a?9XOb$>Eq=W=5g4_{Rs1$G3JZ~QQzSGUPPcG>d}DNS>RoIB#K56z^(<3;tV_m zlZ}-6vx!3VSBx0We*}IP0QS6Ap(h&oEc(lq%uO7H<0V|Dgdtv;;coTtos0aP0hHGE zJBMp5FFz>nIDuS3fDnUOiktg9H5q{S@ zeO~9XpH1;0a4utGc$!hh9IlgV^>|PCwpr!OCyO zx>xiUPCTCMp?o~v45Szkp}|;$YI(Rah!Zw5*U>d-)a}CsCX)&7m&Vk8E?`Y+qd}9f z2o1=Gp3afIB1JK?3?_N@ok~3q;L6YnNYh|Aths`&s{|xJt$EU_lOW_|Z=gvhvw`AT zLz{s_{9?hNw1MJMmwnS;vP0H4bO%o@oux}oXMS$jI5kmhm$AaeD60wY9TN>JjpXR4Y*F4=LYGy5Pkf8yYhw1tir=ivMP@w1kY30!w7OsF=5SC5B_~v= zM`j-U50_Hv)l{94w~Xb(B!oD&q_l+h=WP(cJ?pFj2qn&oo}wi^q2ctReK|{5)0I08 z4dk%DwUDb9hxZ|;>lzzf(^|y~SUstQ5f22crk!i((3Cmmg3g9Yq^;r%=JE2|h$>*~VD7iKMc= zKu$R{m1NF;#ouY72Jz4UKk3)%s|lyzR2^m3^X~AhXku2$Nf}nF1iFYQkN0a}%@5oO2E4ZqWg86PncG9`uh4fl-d&E0TT?N{?5+2=OR)*Dg)qJAbs9MhKrs8+=r#+af<9 z`=rbqu3Rj1zZQu8a31&roP*=f|MXH_1i3WqDE5y{(ZA@qju*@8VwK%6YKdx7!QC*M zT$)LKNd|fQR9q40!Y;NeX4H2+c-yinbb0=ET8|4Ek?EN8m0EM2n&MJUs&N9SG>cjc zGKrc2+{^T0aH)Md4-Nf~GT{QMEpD;A>n?Aa?DbFC1w+U;Ij zNE*RiCsjR1&sCxqlchH+D3gIcWJR$inWL|EaI^~Ix&_!pSK2t59;@vJQoDHIg>u=k zx~F37t_s`IvQyET>8iQhjZnL{Vdr}2wM@J&xdnZT)sto_)}zJ~+v3;;eQP-f=$P{( zA1g#J365hk#C@Q}+QUX6ly>R!suHPm!u8j_J^DW6q)4~5g6FpiYmm6e50*IEGq_zB zGwX|F8V`Fba4zhPbr`QE%!j{cXu4K3&A_4Fa$+6I^9#mh6uz^-AWleV>vm9f?^x1z!S^REu#weT%svg;QHTb7~yfU?G8XJqwnoQuu^ZN6qjv{;9H7}6P ztC+g2f^sbd6Rx`RZHSGW$PQGM7OvKwzx@^ETuW{q`m4Ae$gvb>&6)>64VGP*jGaV3 z4+FaEBd_#V7F@0C#acKvRh)6PE)rXnmn_Fz2$#qnZ25mWbH6>v;u(~y!%eHt0K13rO3O?XV_(C0#Q zD)4qX0vmTgldFG4J6PsOHq2PvVV^4n^ppe96aLECj%@3OcVoX66Z^&=hEJ2%W(NY8 zrTE_{QSd(~q^gLbl7yTr^C~j{Kp1l8J@B7C(Ek7^0f7L3|L4{7e?tBk0>HPx-{*gT zN_naO9QDs?`oH|^U-tDc1N)a9{l~ro$o}m9GwR>h*8jW8U*`2M@A{W}{maV!W8VR> zf3*Km`Tvl!|1R_wa{UXq{smqCBC`M3cfjty2>mx;_TOdxf~J2V)4o63|9e&(f7Jgu zo`2_K|6S#8j{fH7Z=U`_ssGq_!27?b{1>A7@8kbw>u;w1X6$b!|FQ1?FuwnrS9vK= Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/horizontal-layout-5to8.gp5 b/test-data/visual-tests/layout/horizontal-layout-5to8.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/layout/horizontal-layout.gp b/test-data/visual-tests/layout/horizontal-layout.gp new file mode 100644 index 0000000000000000000000000000000000000000..be7d700f6860efddd5878d347a425f8cf755e4e3 GIT binary patch literal 16665 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 Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/horizontal-layout.gp5 b/test-data/visual-tests/layout/horizontal-layout.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/layout/multi-track.gp b/test-data/visual-tests/layout/multi-track.gp new file mode 100644 index 0000000000000000000000000000000000000000..be7d700f6860efddd5878d347a425f8cf755e4e3 GIT binary patch literal 16665 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 Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/multi-track.gp5 b/test-data/visual-tests/layout/multi-track.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/layout/multi-voice.gp b/test-data/visual-tests/layout/multi-voice.gp new file mode 100644 index 0000000000000000000000000000000000000000..c06cd628ad87074fa3fab7868835e63a82634f2f GIT binary patch literal 9301 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 Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/page-layout-5barsperrow.gp5 b/test-data/visual-tests/layout/page-layout-5barsperrow.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/layout/page-layout-5to8.gp b/test-data/visual-tests/layout/page-layout-5to8.gp new file mode 100644 index 0000000000000000000000000000000000000000..be7d700f6860efddd5878d347a425f8cf755e4e3 GIT binary patch literal 16665 zcmaKz1C%6Pm#)jUZQJOwZQHhO+qSE^Y}>ZFtS;NW-81XE^WT5&%+3`jBhTLF&4}15 zGfwV&j=U5w2nxXe&mjJE3fb8@o7g(j%l}6d1i;_E|JN}7y!4E!`j5j z+{DDWL`%vVN6od`_7`y+%|jsFxss;#CL^D+W_G_){ z?hX}ea%e3iz2*1K+4kdHHRtTJ+pJD{i8fimR%C=x4Id<7Tz2*AQQNd8Fk5a*mo5K` z_AQpk$~eE9G(T4IT=O^~z6*R2yb6xk`(K{aE<&?0-DL`ArM@UNW%bx(0a-|Ke4Y$A z{WOki6kerD@G}3so4G2y+TOKd2GKf2|6pP?fo*<$hJ5M^JR{mK|;co)j@J-z>OgQ z()SxdLVbOEB8cR%>?h`f_#h0hQNd;%_3+Pp9|B$M5QuUn{=s2T>etoY?g8HgDZmvQ z;mI4Fu5nuPT-b)%HV!aw)1v-7z9zTTma;&xPd2Bm_!-9P{7U@%ae#ZbV8&O$3&wm* zOIj4D70Js?JrMXKAJKV4sLWC5wC=-AlDpm8q}~VCBc{tOP&0yHA2=ugJo!xetgRS8&(<>A(eFnN4O{ z^g-1LMI-ocHh$Bu^+sx@(GL~^<{45zSSuhnq#KuCp=o;DE@6ipoA(DKM@F(Hpb_nJ z2L(D?jtxS*5kSO#RJ}g*&p$UV1>r&{gQ0lblO77wmGOO^){iHY8HcjqSo^ba>#&(; zYFPvGT_wL0mio>}d?CYc1uhAK8DQ5HZRM5dmk8(xfx6u=*cQKUxw9O$Yw}ofFIHC9 z@vGll3=ljAh{y5@uy5>N8A(!cHhJU>(%p9rvE+7tKWiY=dieqYumdJbdVJtLYuDTj)xA=Od)css+%i%sp5a*@DsD6S6j~_A;psv ztfw0{o5c+YvAZ+}d4H4hjTI@KxyphkIWur4G@lKQT_=Wh#nuB9vX%HL+#V^{WQEy^ z5qs<-E>Ykrn`Ub~kyqNy#>u&9K5`eYuWRT<$>P4Rb3*-4eu0u2XbQy zZ+ap$v4`lWE1NP_t{+c-$4fvK;GI`|nrhVsaA#yo<{}%P&M+|-NWfbu``yp_I(X=! znM8J(!geV6OO2lT4|&7jyyucI*Hz|;Iwt@@IN639MI#UREd?%X8Xu0(5s;t&=^poc z0ZNd9GEV?IVd@vaH7&)0&267Q8rNM)3%Z@Su_kfqjaRL^9T=cs1=)Q>7!y&>WwDuf zP950z14kBrhY*~$$z2YA)gzab)f~qmk1&+NpW)XBx}sCh18p_|>4;JPta{-!m?5pI zqoc|`B4g<~r-ABh8OcdrAzpl5P$N>t>c%@Q_1fJIHpCY0rOBoYwss@1nN3fL#frfL z*({*$3#`eaH>T6cC=(I^`ppnXu@2{t091kSf}Z|YZC*6ulOaqZ4Dr=GXQ(( zmQ{zL?CFsWpEoBo#lh}p#8Y}i3M| zlvZ0q=?w@mXYp7e9c;YoIgja8B++M*rjJ}}jIAVJKx)YfqnV8nwR`TtXFq%F}{i)j5)=9 zFZg@OwzYdNv#eq!>av)dufr?QYUlCPW7BGTT=p1G*=NX^knxPQ!EhUTn@`AM9DMIr zX=xW|Pas)s!d1ssK%YYXSv*wYR7b!0Zp+9gud?obeSQa3WvvxR|M_a_ROEPD_6QPQ z__Kd2se(5PoFaZ-J7`F^RO>njHyI;*OP~uGHglqL zA7s)24Teuagpfy6UJ3nJ?6Ix`kKFce<*DJ`cdOWpAY~#cKn!;x4~)u#3#piybyzWq zivU8?cwY~bCLPP?F9&R$(e`x~KS~kT zKt*If+z-P%v7f`NJXV_kV9Fzq>JX3CF>|J3g^y@txL!)uJMXfAf76g+uw&rGDB+Um zzHhi)(!HL9-+p0_7`i?Wy&HFrL0SSG>oH73Wh6#rYzjf+kVafAZNw*c$S04?LmTCV z-HYaU!)+y($1i_t&$L}+PziO>2Ja#URp8{0_4myj_V-P7o;q|Li~{%#af!bGEZOqc zi>x=@#UEZ)7}m2U$v1)f$9@X1tQ76Pe^VHE^8J{1iOk4+;Ga4*at8bDLoH-;!f3^iCSW-z!t)V(Te!7TpgSL`7U!f>UipW!5?mjBDWYZ~Fq z+r6}q{vO}KR0Cf|sQp8gOPx+y_?SvQ&fCJe+FdLo&kwWJtnbDh+ap%RHD0T9@vU}8h7#!an=#Iqjwj=xXAkK45Ob-W zKz7%{MuvmBGTR0G!G|BFI&a5rRi=2o8XYrABl*@7%GctIiO%Lu0M_uQoxz?H>cbA= z62k)JxsEuH?5Sw&ep`BC>!AD68=J&6eRF!CHM5l`5BnRwf5F}exBfd%P=Ek+hV`M~w#)}oNL zGV*Ip;-xO9faYeHNy&@E#EZr{#?t&|5q{1}l@$-V00kW14Z*iMXb_lN%aiTNp9SVn zvg6yvGAnS9MFsed39j=UUG>5uS-z(|FZjWih@wd)>SfpjN$wn%3kT+Ym_`@bGxseR z$j9srs#&PPxI34lSMumf-#wwb{^c3`Tf;eXV%NW|+LloaFSo#4qsl#cX3eeFrLyo%^@_)}zk&FZdz?Sb^%q6z1ts>m-|ph|lx<9-e&Ju1MU(3Ea~ zW+rUOG>$6MYL|_(A9QuH7LzW*o=|*B?tTSjesw9BFZZB5h^3nnx;Ce<`rL6;wcPE| zRzsQ$X2>ipwLUnAc2wU}K=q@W!8)|ORd4>jT)jS(Q(xs+0(g<-7?}KBwB}wpav=oZ z{KG3ih*G(naJ}ZzSnv+ZQu3Ue`b`LPk79dYkas(u#B-e#5St@HbXW-^VYFv}!k2?B1mCH-c)Zd9nI>^ z$Dn={yZ#!Cy{b#8pSMJZFE~&*Ood0jfXR-;*L12uAt zStK|Z9s3|4H2Q+arQOF2Wei@u=@g*d4D?w?mm8{%6A6|pm|hqbRJOJ2Z%?hqI3oEK z7u!%?U@A8!-p7AkRu4>%xhFLh3RerYHR1OJZ_b2A8ZWJ+QYMdwL{lvBYtF}e&?2CY z@Jz8-Ug?U;)c37~L*sW_k?CErIZmh>Q>wm{Yk)Kv1_UCl6+wD2XPeKFtdOvcSg@e1 zvWT3c4R!I}b_?!k2?Ppb0u3r9S`tuv8jE0} zx-i!L{w?rI9R`i_!NH?g(4*;`JTSPkx>F}!d^CfTv8(lVtqV`P6(WTtm(}G1DIswR zIyl$Fowg!8L4&~TG*ayziKg~ub1di^7E;DoCs>p@OyJ)?FY4+Q{=4$d7cgkAvb(z0 z^;;m8p7@lI2150Tv&qGG zu9uk!3ZT)7h8cM&+>dZqNfdkef@BJDZ9y9zTn>kcV4`+{fexOS9|J$VFo&6!atn#G zx{EoM%2Gx3jR%HF)9D}O@_cmV&p3sqiYy3Q5jb>yYn!-1{)PxTKF6{sQ=os{*Qp45 z8l)hDB|TV_Lt|+P_rmSx3jqz$5hxYEU3KzY7ZRfPQWwj>blZCN>_%nrU~7y+bP;)<*ijnuOm-xNPDm)qokQ@bB}THm9a^jT^ONPI00R&5BnkZvT#1 zSs8aOX~&h067gfJ&1CGHfC^)qx(33;_u#|vhYB&V)JL``v^A>s`GEegW)d|th0TmP zaAft};MhJ7ABEI5Q;iL0Qr45&JU@Cg*!PG%rYIa)Ran zLq++u`JM4bV=BKL17ZqQlpja}Yu8sSz;~Td-PKnZXGj;!Y-phL6C6A!sZ4 zSTj(W`tn5)P317GGbqshHNss)Soe0`G+l4_V89F5CNhkKX1kgOZ7^j87+J#Cwx`r1l%{6@b`D2r;weR{X z0?$yE7z(L&`_h-mu?gEiX;Ky&st^VFgcyu;XzNu?lACWr+*jW zYop+r#ExMsChvq=fbfgtl)Q&Rq@zMxiK}HamztCh^z!qIh{jM=-Y~L{OT@BvZ&hee zVK{z=c@qyBL!>Z|tm=4H(+*1oRD?_Snf9JwhY70nsAZcTg(q(n5{vc;{GaQL*#A;zls53Nb8-Gtbu_gw zb8$3qwy?7`(%08FFn);x!SDwFkSohCLi-aB`)B)~6*2!sQQpAuzw4O+0I``O=z}m~ zX51zcuto#m7lU4~{~3k)zv}*LMO5C=#MH#m#Ma2fiO$l=&ekTT7ixe3VPxm%H^exJ zaS|P`e_P(8Ca?q@%PI<`k6Z0pfB)tC?WdLihY`#jSg&Atnyw)64e*F07}ki!xGh+) z;$CmTkR0dvf<%Yuw76zFtcphqq-!zr7tA&1{AO-I1kHeg=7XC?JE>U0o zE@~ahXnGep+YMefyFui>KZhUizn%ipAMZa!T_+FO=q< z^sM!8C#f#UT-S5RUYFK93pp>X+}wzbwUfSb>w3|Az(d`gVV~#8pFof#6i~tO`WP}= z@=MsSlT#B@p7ZN|pJt{-=ohc4=UrT>+YfPwuF`IXoO0K(==}%dH!r=SVrKYPw%d!f zwKV7E_A6Rj@!)zlQ6jeSVc**7c)9#Gj(VxFg#FHD%ooyyEJyCbJuHeM$}neba2qi? zx&}KBRUZ6I-fcl_i+DKIiF=;b9eAPFUetBBCl_|#U0pwV`M!@|-3~B`2Q%`WHaz>k z-&RkmMjQAOh6gom-`q32on5a$Q}L^E=^C+z0UM z86%$et+A#q=GRdY#mty-Fvb{7U$$=Za!q7`Kk{}lGHQ_Z$pPTFM7!rR@VkCtfYv&V zi7-7#@9^PGf1@|hKKRW)SD@}9``M(7rTv~ zAZl`Wu$ZQPzTL+?ufV*YsD0r2IGBarA80+TwSK{WX)GKIxPRj!cYIYny(@qzuFuAv zPs6-l-kw;;!fbc~%`+F=uW{+NurYU$PjW(TzRrHW`fZCo!`mXXH3}!j;0Fl<4JVdl ze_&>FuhqPI8wPxE#=oHbO;U1-FOyPXYk3HSw=$~r_+V9|aKeolXu zo#XpY$U`G|e5rZ(O(5QU9qiD3osn>SJNhyAd{ZOuE)LtZ`VBv)t-pVNy-qH__-%i& z^|VXN7lAmTFCz>VH8vsUnab$z^lzK5A%`mw`+S^%yZ_eP6EiXZ&x=-b zLyT6g>tx0!gAR=t2O7`*-f%H!`LcdEo zFKU!a4T80MFkjH%u(JEm${SOUzJed8byUn6Yz#>5x~0~y(-YLA zY07D|ZmaC(cY4?GdCuNDL7Z?E4}u1T%otc6yU?3jh~JNo#WB7Co=NSYt)l8G_A+m5 z@TiERK&goCFnR!@PQF=-1n(hD3}4{(TshkNH+;o!AQJ9t9hP}NqRX9!5<5K|FUG;$ zUt5?nx0+FQV4jjH9@=iKJw>m*kMAmXy6UdO-qBg&Iy%+?w=MEohYimb$2 zV$>!*uoekfmQLacb3L71fq@^VjY$IbA?b@=24F^t8R3WqyaN$2V#c!!nUFlB3gyA- z_bm1eqHXB5LXe|bMp!SvK&D2D0sUMsS)I*5f1}7HKF$^m)on8>GkY*(n}v$fd(0Av z{T|ST)W7hBd_-F5bN436AqLUjn(KokOAX_59H@lOs*`qpp0C4CWAByI!CtJBR1Y=x zbvje`qhmnWGNy+Ne_a7VUhci6QPuzW;bniRK%qgVRU*xzc*Nr*fUl z!r2*^rwP~yG$>Kmk3yl>1_I>g$%;LWH9YWKR=p5~T2>z+PAeg%LW%kUnFOKB+N7v2 z%64p$uoyzKXav=Zh1?YKS}R8$9qdS|Cyrd|lCSMYX>NlLPoSmfoiM7tI6Afm_GLAu zw{i9!aQ$!DZ#=cbyl8Oi<0F#{2tLroc{BJ2c!s9=BFh@FNQ4=GvA$%2*Pe^!MU&#F!f=VLSa|PEzRZWQ2oA1$Ka_Z*bV8_ zV!{N@$7Jtt?z2Oo-10*q#S_0Xe&IEfaYK8ruF8{~1{p&!kbx-~AW0F?ZF*v* z=zU;@dZ*fl@eu9IC>1j_;2|@voe-@s5`$$uw>EbdDzoOG@7&#lWEkQpK8%0vK zae^rYkcG0>8f2d=q<3EP;2=0A*(tJr@)l0Sn{LsFILhBAV4Y9#CJ0cel}fs5#Q*GL zx^RRYg(_p3Gq~KW%qIcWAns)bDuRPkHu=DSL?K=aEz~CYc>O zOlIrQkAiDT(|A%MD`(>*CLQC~I_<+5K0KE%hhzNfIlh(08NQlAD^FAD7P@csK*Igm zki9+aYj;{Ro*swq+TYk}KO7u3@P(NL2t5py1SClLf5G|K+Sj4>pKbg;n;@#GS!nNw zaZ%$^Yjtw@(}dJqP5fBjo=;)N)ggoOjm>*EH_$YbgX?m2 z0oc~)dDse9a$;$ryvP;e(Y|GE*JHBG_FXfn6DN)_P)Z02N^; z13+7fBa}bRLg{D~guJhxGVNJUBvB+BHt~n|22V7OuVR0=wRUw%ZDvK5+TD{!{ZMPw zskuTmx0IhboPsZn?a`5|@;|t?MOk}r%NQ6++Rj9K@WKwMv=2zxNA6TO5W&%J2LpfU zsP!g}k>)-Jjgx@~2H6fxhs(e@14gua?5YiFh01&x2;zNL^32&U&0RoPCD3drP?F2w zof~pp(V_mdTlMp8`*JGkMbgog(cT4oMd^+|^$TO~uZ(J&2%1r`t?JxppYU=`LB*|r z;(!!aif7~R*leG8Y@1NK(T^oRX_)VE1mrrj>A-F3hOah#oAZFq;ll5@FZk0O@ix`C z@;Z}79+s@OC2?zUgcI3`&XmsL+b-HGs(sczx&MTt|Z>zXA?Xs=$EaM-xne;><&5 z&{T5T#dc@&m7(gWc$|lLiM%ReCDoXq=!jc^RF3myvRNHXVlgGy3p16>r$Qgho#zMf zRCJQKje_6}5h%cEr>C85x?N-YphS}1h&n_q<|PbAxO}X(fJdusguVRc=Y00sbM40H zhWs3TWNgJUlT9Vq#gk-6m3>z1y2U%ZKC%rP_;M;hsTO&i_fHu zZA(w3^?&K+64I-GhI)Ip$Q0(WcLE4&@Tsm6cx4f}wpo2dI2Ay9YA3!VG^~Ae+ZVLj znB^|h*F$o3fnM|QpOpD?2bP%#z0`>7!=$=wG?KznB)yoF4rDwp?wmV+F>~c{8OVa zGx&m|!nrtj-p5pi>*{PJbDbQM0oJiP<5jRc7%jt}l zJ#=#15F?4Ejya}}M^8xx2bUNHCwiI(Ayawm6;w3+mOGm$e6}XcV)OKoL9XJ}MU!o@ zm}C4A4PJHUawLCg2u2dGg1O|1AVNp=0xD5Y`+}r5uPc9IKBaWo%+WC1%=lUxtCC)S(NU5gs-OkF9q%Wp)p|o-V@|9dd!|e!4!KONs zKa_{u^w<<*OSVIU!Mix>ok7dc(@V%u$P-pTpEtu&Q>s3-vhAq1iH+7QOj*DB(%%srn!>i7a52kg{nDOc;Uy!sfIVYY@z z%x?C|;oeYu(rDBkw>tzA^I^xvd7NP9U;~8E5uVAfb zEFfhc?jDZj2wa(^p+mUwiB^UyL zzxf?vs_ho)H?heNSeE zWXepU0!g&dj@aPOHwC2CA*6s%fkXnh-JV>O_*&fu(^C9|Mrl>zd6U{c*OK83Tu5LN z^?uZ^#=)~$1Lj>^G`x6k8$qhnTwe0#sk-IlrH0hIUe)nYfu%+SGx$(Dp^2L+C#(0VlCbNdH29o9WHNXsTx8`jvETB=CixvxY+d72D& zqt2GjW)I+C{aN$$GcvCbgX3E7zz2RbIM^9~n5f%t)Ri;q`m)|c&Sg-w+Jr5aD|*`lvni{PX_v`wPD=2*LSSa(ZB z1W`qL_ef8L;-;>HJ*x`6SVoS)F(<89Q!U%VKW`y%3T>r0u2JMvj#5pGymYBZT@m3H zIp|kct1?Yby`o+S)8dS33bpq6HI}!(?6yyHro|COn8KMbDWtWnOY}p-IxWfFSuy@5 z1Y{Z>1|0mWqlz|(d5G4#Cub-m#TZ(L7<~-JjVT|NdS}nk0-N3)_l1EL*X7NgddvcL z-JPA8s5OgLCTIfiI~X6>*~)#y6U7y+)FeAX63-UYtIA+Tv0O;$!*KWdkS0>#l^7AJ zX$H?!?hYLQ|BFM5MpR8dNBXEgkbY&+nXdueE`!)RM%#m4qB8@AlHNzc@_y)gZl8I0 zSdOmr?TOO&pyD>VyV=FkK=VzI_01lKhHS<4eA%2Qd+`Nc20BWkZP@hHt(Ss~h*@m+ zu81v+-X0WPO}YE5WUQY55M|N}zIIwFVUSkC@@<@d@4$w{cAd$r&dNC7S^XxgN4TWs zL+}El!h?9LAV*0-@CK?TfS$l3Wmf8=RfHUx{-nR(Vf~%m$3DR)|HhA=*_zm|{)ux? zml*eR&$dNSc^3FN^}b6EFT8o@wlCLxH^^#sRdgqWxfRGMl3YV+v3N{%aiJLKL5U&c ztIQ}Dd+yT(kUPmEDT)IF1F~dh@ZG`yG!%V7!W;tuE8ujaafj1|ycYG!=ScnoaR|-p zlw=mR(njKrNGdWaNt>c&LRW7KbRJq9ho|M*(FhZ-ew4mZZO`XsbNIt3-Rzv0k=}#) z7VFfCiVO0VB4xI?zZx>MBw{3XubNUfkF;bTKc#561&TEu>Q_j&rafc&iD$^!fmAVc z5620MAE-WZAo1H*2?Kr-{>3niCnl=+RumCM8>~-1XBS(w~Wt|*;$AXv{2M($QI3l3N@d<{};^X5jE!&^0>qYk7yDL7(q!( z)?I+A-#}8?!}36Ll`gd*>I^M&Tj;j0uW>PwR=(a1`xOLdFn9f3R2IgT*^05@b;4a| zx>*u*?glhVdB_S$u6E>tS}LOx?wr1=e}etKuesjMi}X{H0V@LEeVQtK!Yu3^*1-T@ z6BYUr(>`C5W;^g5XfOY9;hw3D2Kq63+@K@5Lc8L5#~MN!=DF2{fzw1Rcl^YB?{L8J zkE<&G<93<`Ke0poJ$j5w+CwLbBfq;2MLoVFTl%K$>5tNe&(z72M6w+Y-(A|VOAPSn zj;5&`#PmgoJnFGqYfy54AZEs{aU>F;aZ+big4oqFQ_7jIQe*N1i4?Iws5&h|LVEdH zv*~y~m&u2gF~{SIz4e!71X4ata{L$oY21xRhqrk|#oN_b%bY-F9hV%9Fx=#ddpJ3m zyUr#9yAapud88?A8=uaS=&~OOUfymT}v!l8O-K%`3pot%1L_91v$s7-g(TjPd zKzoHabX050j@^fkay3nUR=r7d3qlyiZMe$Rm--*pTJ!1p0p|Ls+3HPElWml>d7dVp zAA;5C6M05oHe%m!_5EGj7n79L0N~P1DPeF zuw#QR9d@CtTGE>Eh1t3-pUSr z{of9$-`JyfvL6jmfdkM1FP+7&j7@Zhk_b+w( z^xXHLJ)Mr<(5k@|Q&+{z^k{cH>l~EXIzqrhy8%2CzUrlb6uQ{EYQ`U(ZPJ%pbrU1I zIcg4b3qJp&F2x8kkbC>iVEtPR9kDj=^D-|@?fCiln`8#yg{Hsvi&gXW6>O}ZN~(89 zEW-MNbFWxmvIx}I?(sQ8nC%34R}@|Mfj!S!xgbrKC0!!Yl}kbta3*!pm* z5lHK#&ekf=j|aqT!2Dy5scvJLU0gkv=Q}mJxJITK$FT;Ta(mMqG>Yq3<_q!RnS#br zyqA?fyeq?@&Im-NJgW*G(ZY6k-ABAFGgiOj-_S#uC2XYUl@-eh6XDxANbwgUq40^8 z&-}g3{l>@>G|2H2HA3SAJ0b8Rv|;v~s8*CNu{X+ufnVX>^4S?-Pu_YS16Ms|&Qist zBtsY0&5P1J)}{7QBNge961Nqt#dj|kKuG*Zs{Uh4Y23oLldX~LPGIlLS%-R5~Q8+ z<-dM;0J)4L`a=nyR+R*H^?0V97DXJ*!gfGBZ#nGJQt<9^xW|1XS1E(3AhSRQU)|1+ zCL8W8BP!+l^*8W{ikZrH>GL(vq;F>#G2ogTy5C3gE9|3&I7_1e))tPfn_Q1Y7a62kaj2%(pLlJ!-$~%2tMW?>eg!!sZ8=$W z>T$?}E`vCKx|Meo!YlOCV0J+K0=CcBBN4?P?hxzcME-z4klshUnGT?1Y@5F}uOpkn z4?8ca& zr_=@Ro2wxkuKM-w`@6tcj-~hj-^8rmoNR(!$P2(Iu8^>xVR{*$DmDQ? zDO8+I)Eu`o6Kx6G^fOxdrbxNiQhYh#SBAo6fNS`Y(x1X58KI1*rkQ9nn5K+KW+)4; z1#mHJ!b*lhb%5$Mv5sIzv@_@_)dCl@rIxu@MEvnt6dV7ki^aj{Ja~DAZak&tWU&$; zInsNc^wL6c5ycR8N*c!zX}}#*Sr?7G?q0GQ$V6rK-A{fG8;viuE(q=hDJqQ!GWm#^ z(_lJz-#$t{1PZ>xWPGS(zN2J5R0ASBbV)&LilaS(2>YTTBQc3!d{R6iNg^D|TXjXG zJqd|}WrBftq&Q+y#MET4cK>ku(jg-miC}h8JSRz_P0IT=CA2-+j51OaLe}x+B%)|a zY7hUh|8k7xG(fmba9<^hv?=|zkk$xhG{G~P_!E}*8;EEi2P%#W74b^heX}CmzHHz? zR>U0RIQD=jy5a^y3DH2B)Qv_>xJ_x#q3plKDrH4N82#iPQ5L~an#NsH`J>{oSrKVp zHgO=UGB$PiD}!jW;%=#wY9O5|j!^}1MA-@4MJ1R^1<&p0Ur(D7>Yi-OXig@Cn^5RFk|zkfDZD1dg8H%4rFD5xmfYsEdLC-T`DCTNXLp}WJMfVas+qz<8i@r zJNx7La}m(@WOGJyIw0K6{)j~}l+GAQ>jX1C{t-KNFhlXuEM1IJIXncy7HGqPzFWvD zs!J6%wMfwrpklA=n)peG3)_~FqVk&%izp{cgI2MzWx{(x75=ufy7n%pQbx7xFy6S1 zDxc^sNhrH(kcfvb<}sKiZVz~oUa=WvFoCY4pz>$v2NNTI{|?B+Tng?7lO*82c!+(9 zVV`J}6i54`pbI$zsy-Gan6R(ktkG##%DZY&?E9-*I>fYvP<`q;-KZl zC`uEOh_J;dNO~gFH37*OBfE_Aly<%WL>(HG!3~a@!k^_KLuxYoP`aq|eBNj(Mt!2x z00=o8ztO1+^OgkxDm4*ti_wtuT;xT;D;)gQ8c)S132hL0s!@S7lOoFrtK)AhCpxf@ z_K0a?9XOb$>Eq=W=5g4_{Rs1$G3JZ~QQzSGUPPcG>d}DNS>RoIB#K56z^(<3;tV_m zlZ}-6vx!3VSBx0We*}IP0QS6Ap(h&oEc(lq%uO7H<0V|Dgdtv;;coTtos0aP0hHGE zJBMp5FFz>nIDuS3fDnUOiktg9H5q{S@ zeO~9XpH1;0a4utGc$!hh9IlgV^>|PCwpr!OCyO zx>xiUPCTCMp?o~v45Szkp}|;$YI(Rah!Zw5*U>d-)a}CsCX)&7m&Vk8E?`Y+qd}9f z2o1=Gp3afIB1JK?3?_N@ok~3q;L6YnNYh|Aths`&s{|xJt$EU_lOW_|Z=gvhvw`AT zLz{s_{9?hNw1MJMmwnS;vP0H4bO%o@oux}oXMS$jI5kmhm$AaeD60wY9TN>JjpXR4Y*F4=LYGy5Pkf8yYhw1tir=ivMP@w1kY30!w7OsF=5SC5B_~v= zM`j-U50_Hv)l{94w~Xb(B!oD&q_l+h=WP(cJ?pFj2qn&oo}wi^q2ctReK|{5)0I08 z4dk%DwUDb9hxZ|;>lzzf(^|y~SUstQ5f22crk!i((3Cmmg3g9Yq^;r%=JE2|h$>*~VD7iKMc= zKu$R{m1NF;#ouY72Jz4UKk3)%s|lyzR2^m3^X~AhXku2$Nf}nF1iFYQkN0a}%@5oO2E4ZqWg86PncG9`uh4fl-d&E0TT?N{?5+2=OR)*Dg)qJAbs9MhKrs8+=r#+af<9 z`=rbqu3Rj1zZQu8a31&roP*=f|MXH_1i3WqDE5y{(ZA@qju*@8VwK%6YKdx7!QC*M zT$)LKNd|fQR9q40!Y;NeX4H2+c-yinbb0=ET8|4Ek?EN8m0EM2n&MJUs&N9SG>cjc zGKrc2+{^T0aH)Md4-Nf~GT{QMEpD;A>n?Aa?DbFC1w+U;Ij zNE*RiCsjR1&sCxqlchH+D3gIcWJR$inWL|EaI^~Ix&_!pSK2t59;@vJQoDHIg>u=k zx~F37t_s`IvQyET>8iQhjZnL{Vdr}2wM@J&xdnZT)sto_)}zJ~+v3;;eQP-f=$P{( zA1g#J365hk#C@Q}+QUX6ly>R!suHPm!u8j_J^DW6q)4~5g6FpiYmm6e50*IEGq_zB zGwX|F8V`Fba4zhPbr`QE%!j{cXu4K3&A_4Fa$+6I^9#mh6uz^-AWleV>vm9f?^x1z!S^REu#weT%svg;QHTb7~yfU?G8XJqwnoQuu^ZN6qjv{;9H7}6P ztC+g2f^sbd6Rx`RZHSGW$PQGM7OvKwzx@^ETuW{q`m4Ae$gvb>&6)>64VGP*jGaV3 z4+FaEBd_#V7F@0C#acKvRh)6PE)rXnmn_Fz2$#qnZ25mWbH6>v;u(~y!%eHt0K13rO3O?XV_(C0#Q zD)4qX0vmTgldFG4J6PsOHq2PvVV^4n^ppe96aLECj%@3OcVoX66Z^&=hEJ2%W(NY8 zrTE_{QSd(~q^gLbl7yTr^C~j{Kp1l8J@B7C(Ek7^0f7L3|L4{7e?tBk0>HPx-{*gT zN_naO9QDs?`oH|^U-tDc1N)a9{l~ro$o}m9GwR>h*8jW8U*`2M@A{W}{maV!W8VR> zf3*Km`Tvl!|1R_wa{UXq{smqCBC`M3cfjty2>mx;_TOdxf~J2V)4o63|9e&(f7Jgu zo`2_K|6S#8j{fH7Z=U`_ssGq_!27?b{1>A7@8kbw>u;w1X6$b!|FQ1?FuwnrS9vK= Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/page-layout-5to8.gp5 b/test-data/visual-tests/layout/page-layout-5to8.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/layout/page-layout.gp b/test-data/visual-tests/layout/page-layout.gp new file mode 100644 index 0000000000000000000000000000000000000000..be7d700f6860efddd5878d347a425f8cf755e4e3 GIT binary patch literal 16665 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 Uu)hxQKaWvB008bkE&zc415J`&1ONa4 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/layout/page-layout.gp5 b/test-data/visual-tests/layout/page-layout.gp5 deleted file mode 100644 index 791bd79be19fa7177020f9ada7280467300f2383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 zcmeHL%~Bgj5Z)ClB#1HOke^GONjVF+T*Tli7fGcmC0P)>DPt5##Fdk?Mq{*QwQ}vQ zpm>|SLS7-h_>^-_d5m0@{-$T8K>|q_;_|`m>eXydPfz!^-93Xp|Iw>F^0sSYXWwg- zYoc1)6UPs}*;uy}EzxtaeBvKT;YUqT4ufN9W2Q)4s2>GkDAQRQ=arHvy=bgVo&?dM zY(9&E=%v58alb$oX1Al4ozt&qbSYXG)&84ApOKgI^b20pzfJn>*~%}s;WZv_yB}f3 zt?xhN*ExDEy5(BKt2bQMD?fg?zw3TX6H8A!aWfImPlfw*ueMcZ;chnx4wP_rzwTAs zTcr5~Yc7kyq*}ompOVHWmCmcvI5=#j!maF8f30~tj~ec`G_zR_Ls7#_B5E>`@v&@* zHQ`06j3Yk{I*}iW!Rop^=*F_SFb^1RRQ*FK+$Zimx9X}`b~{ZO`>Fh$W|@Abp9O?Q zWR9!!zNF>mc%9^#zBxvmnS6M>sO^x-868uOxexRKfp?8SZz_UU=nd#>uN}v-azr#1 zs!>&1ow%D=JrYbuZ;HQk4*W0?8#31xuuyO_hqJMu{wqEm) zpXhmZZpO*a7K(H8y&2SbwlLGfyAoP`=djmUn#Q>qvOsuQLR*^X9GcA-=L+>Srn4f^ z<}Uu3#<@H#hn~=8COU_XH^#Z*PB%#Xc)HK}1KIkH_yIBO-X;E;7=%5LT4riDlAdd#8i=hRNjovl4`jz&x&2BsI+0A?WHC(j^(V!E zLkD#uh(Yfr2CuLcciTrn%A1aP0^@N6II~-W(2B_)|5$&Ti-yY!bHm@^Cdn4+r%~Dx zTk?h94O4YM@1-pnCycy>QYq!oMI2Q!Gu}#D2pc{+YBJ}q(K~Vi=1asxsQi2nne2pq zl9q&xaS38mjg6~yYK!uD3RDfN*e}OVm>3eUf5!F`?V|X}qOfm|43}N;cEG?=S<9b} z6K5pr5L^i^5e);va>E*w9Zrp-s2{Sb50&)JNy|?OALOL27y%Rj47BnjC7+(lH4P1f zhW)ETqf(}zHscLd%H&AEd}gzWg@Y0}lM@Uio#aRp5Dg|Jj-$@Ed>F`MX&|8sDTsgs zd)%+OBxpi4lk%?Dh>}Vm0)#G5V4Xm3ixNJe0n9!1N)Ixd!P5r}gFD$221Zm|Why_Y znkb3TX4$Y#xgcFhNUqXNC3dcTs`U&z*OEi;L)+mZQhhiL+Jm;k=aZ6qEA+Q1n#>s_ zuZqC`+F)>pHVTIl0utlC|Ta^QE9 z3_N3-tAg~NwHii^lcg1)Opp`~<2ZOX%0|s|FAswkQmkS{5wKVq!D~e8dRq>{9BMf# zr6%TAL)S#MpiG{B|3m9j=haB_ zF$L_zh~9{+6E~vDyRCLK2Yi~51UDqZCep&`spd@QzRr)4t0?A2K`L=Q>a(AgYk|WB mx{4-trzCQ3jTa>>xe5ji-4PAEOg$sEDL;$}Qy;hs@cIu^rk}R} diff --git a/test-data/visual-tests/music-notation/accidentals.gp b/test-data/visual-tests/music-notation/accidentals.gp new file mode 100644 index 0000000000000000000000000000000000000000..0ac5be76066ffb5656b437f85960c3dbf5033132 GIT binary patch literal 9142 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 WWnkf6JKp>`2B83e#XnsDz<&UOB%ay; literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/music-notation/accidentals.gp5 b/test-data/visual-tests/music-notation/accidentals.gp5 deleted file mode 100644 index ddd4f787efae089fe31dfbfd85ff271426ec27f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcmeHHOH0E*5Z1nQ8b}cGi=R-s#$^St<{b7mG)C-rL8cupE}b1 z#zwx1ACX$d`?44bV{fs6F;+6@2e@t6M@2qF6>in`Di@(wOm;}c3@WB|@9M^HUR;L2^-A^B zG)f0H-@(eZ=DJ`~B>+j>U=sRtDEfFMl;a`G6(=JJ9M$&lnL}Bo&CHB7u(ma7ZuhWv@!1jS>I= diff --git a/test-data/visual-tests/music-notation/clefs.gp b/test-data/visual-tests/music-notation/clefs.gp new file mode 100644 index 0000000000000000000000000000000000000000..f82b416a737accdd7356d554bc02fffb68c6f810 GIT binary patch literal 8455 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 J7|32n{{d8FV5k59 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/music-notation/clefs.gpx b/test-data/visual-tests/music-notation/clefs.gpx deleted file mode 100644 index 8d60b7b90a45b73887666f58a51e6c719f6736d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14892 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 Jk_%1@`hP4}^yvTq diff --git a/test-data/visual-tests/music-notation/forced-accidentals.gp b/test-data/visual-tests/music-notation/forced-accidentals.gp index 2d3ff226d65666381c7ce26ca2e2ea852a4ce472..0702926649199b307080724f9c821de942584702 100644 GIT binary patch delta 8772 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 d?^8lvG$w2|6dz-<)?moWCMg!g-{Jr9 z#Rs4KF+MiVHz#Map)~}25TpZh=G&QX=FFMhJ$Lr}%7MQdi2bG?dV#11HF5In(dH9_ z#l*VkqEZ%LOXsOS$@P%-E0Tp?o!Ac9v00!sFGD{(+?7`lk&WiIdR(T*g7kvWZ-i3u zyuVv%Rwe#; znskrf4~4AM>Td#n{~(kvD6-}CdLlq%AcANRB_~lwl!f0PMoGUl?8g08PfW8LQG1j` zol+5FSgE&;BOzbQ$FeT@EY-LZC9PrfiK0sGk}2V6Bw4IHm+R#O{_hEl7ZS_>KM5|a zisKlDMFQs>`JNAxR{Mk4oWoI}B{DAQOVTaUr=(@l4N?epgXg3&nX&?nSh_3#HxFRzPzsPYOU7GaPaeS5bpW^y z0H*`wG>5a`;X?u7;^lPaIOO5IE(Sb3giOQ$_db*hb zax-{ATqF&F%vtHXJ0H?J^41uj%Tx6DKgzVBzMs!1h(RlBlbsu|)CaqQGfc$Zd+=Q2 zS&QAUITWMAv-S}*EYn)EzUC;Lcg%amAMj=6i)swbp)oY7nng(zGX8lV=)y%ObOut_ Z!t`7Vr*(PauEi9LfIMSf&uE<{{suy{p56ce diff --git a/test-data/visual-tests/music-notation/time-signatures.gp b/test-data/visual-tests/music-notation/time-signatures.gp new file mode 100644 index 0000000000000000000000000000000000000000..20d5e66d4952aa3d609fe1f5bae7e18566f5f138 GIT binary patch literal 8685 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 literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/music-notation/time-signatures.gp5 b/test-data/visual-tests/music-notation/time-signatures.gp5 deleted file mode 100644 index 8999b0bd5c135b33e9b4fea9db889171da1418f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1495 zcmeHHOHaZ;5bgt^phP@q@Sxet8a<$5f*w3bsR&J|G<}44taO7!LQPwU{!RZ-o!K@) zjU*hzlaqWiJ2T&OI_+kvce>Wq+ZO4#x}#dewEAS;IIW)x!i`uLL;++~gcur20`dY zr7EZl*98A3lSybC>I18CyhRQ9|8!JCc^7na=#QA9v>L$i`Fg<-bF48{+KLC$8l`jAQ diff --git a/test-data/visual-tests/special-notes/dead-notes.gp b/test-data/visual-tests/special-notes/dead-notes.gp new file mode 100644 index 0000000000000000000000000000000000000000..c9c7581267fb0e759997078ad9333087eb8a086a GIT binary patch literal 8989 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 BpbG#1 diff --git a/test-data/visual-tests/special-notes/ghost-notes.gp b/test-data/visual-tests/special-notes/ghost-notes.gp new file mode 100644 index 0000000000000000000000000000000000000000..b6598f6af4b0b9766ac9d8b5aaef7418bed72e51 GIT binary patch literal 8937 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 VEC&bwdII5P>4Sd3K&scH{{X0VE(`zw literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/special-notes/ghost-notes.gp5 b/test-data/visual-tests/special-notes/ghost-notes.gp5 deleted file mode 100644 index febdedca00f6da998385a0ead5bf06b530f6e98e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1485 zcmeHHO;5r=5N)MEL5XSG}#4RkIj!!KC5iw9fVFCPIi5n>?oyp3%e4P5a ncl0HGUW7dbK_X%bqbOgBQaZ_siws3xfFie{h#9We&@Q|K`7)Tf diff --git a/test-data/visual-tests/special-notes/grace-notes-advanced.gp b/test-data/visual-tests/special-notes/grace-notes-advanced.gp index c0a9012178e4ef768a39aeefd4cf861c92b65464..f187bec76be7ea4dbdd813e287a26e21b9bbe7b4 100644 GIT binary patch delta 8451 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 C)=B9A delta 8539 zcmaJ_Q*b4UvW;zX;)%^2Yhou88xz~yvAttVjEU_`Y)zbrZDYsDJLgs1Tkq?2SNB>~ z-M#)-r^`IaBxSA}?dhIiXt7|Kd`Xn;c z`r&57=x2ApF`7(vG3aKM;KPkz$ol-{#C1zPVsVOU#G8ES@vAe|5Il(dVFa=YL5B6A zsE%;xOB8PrdGyTN6h83&r8|BNb=?gMRHk}5$GbEtD<^(s#itlS)zgY!!J9K)?Qt6Z zli2svA_3TTFCyd1e<~$56!h6mMSU&f$w82~;*94(=|y9BXZn~i{^`bX+P|fRw>nQv zQ`Bs@-+tjtUR!^IJkkzD`|xV_O~5MbqW4i|SEJZN4Wj|O(_~kjp8q4VcQ*A?2ah;@ z-D^7{PMDMK2No!qz1j`!qHJN1`{DJ#La_dXz-J42;6ckDXo>#@nJxk5rzKWS^a zl=DLf>d3RI66!nMWzq&6SOm7QT@2J#luNf6O-qI0!~EzY_buWsayc_JfNzC3&cyS1 zPdZ^UQEtIaOdgIJ;7R9 zTs@092i+dqUkA7oZ0%^jS_{OP*jH|a8$o+Ko3olb0;UW3B5m<-LYNmelLYaDsg`QoFT=TZU4gy9 zgKpK?0MxmS*3trG6^I(9MfCKqZe|7sK(8_IL`cXfJjTRw=*|f$SnSF0)-I>FCBD(F zP=`})-pZ{vxOKH05RdXG(eqfi5wlSru)U7#Z9G|b%Eted-L>3PpEGHv~IQzz2;0mB*-_F9~G*^f!;S@r7`{zh@YQT)m{8Tce*7IUgt z4;#nxN4{t)Lf{(>RcoM^uQ$&!sAUKu;M+&jydv>OHZ?y8>^qF!7_Z$GFIZ0u%= z;WVjk%!jW22RrPk_$!O_;VxDyI2(Hs%FD83q z9{zFfOEnX|idg;2O=8D9guu>vXU*Oxtg<}*e`c2ZbVLX zdd$lAz9w{cf}zVru<^Kv@82gNi~^ny&K9v2%!w32xhs3_(t8AL`!h$0;FCteDr6Dz z3GfmFs5U%&B?^)k;vj{R>dsVkdPV3`TpWx;4c@u5Eu((FJe}3{v;(a;k;-ld-n@UU z9o!$X1uibMY9|WqtCF|Kl(7DpxFJ6R?`DNgSfDXoU6B)7apc3-eXc~$Q7zxmBF6Z@ z{;4N}$y%I&nWOR8@WKfTQ1*RV%3Ib*DV26|vm}rP^|56g$KTn0#;$i9jR+xldkNip zY~-V3zWEWT9(TyyAp_sY5Zi1v1!A-1wH!n&#zAjI$Q{IWptih+@O^hglmLx)#5PS* zNb~Ve8CE16O|vW)1~q5p!d@AK)GbbJWLMNQ^nIu_KR538s6sV~W$1*G1}JpCyD{3l zoLqdX5fiQl?CTO&eyC{x{@*L6GC@aD`{uKB3#I|RRe+J+r)aU%>Q~3lH=eAVyjjU4YAzkI;AvVXmD?b6?eSaa#c*@s*gW&|Zz88XEH>$u zD3ia|r}QG~4Rz?acGhDr&V$W!5h2u8_ubIjI*rwlBBsu%6d}DqW`V&SOloxLi~C(p zH(lmY4z2Pg&p@o#kP(GBYp(1y=?CQ74l?0_D646mXL~1%(Ld}}F|t^S+gM||GCK3M zw5;%V;*(V>V+HSB3M5XlN>&hf*K@n7nvK^IV)N&wNE|4eUC=~4UU&VCmTK(PhNr(5 zHclt?7~u$zGlT=lA#J26>Teih{o6FIa%eQ&BskUbFoA^SxM0y;5c4VYJbOC03lf*F zK3Q-#GK^xc!zblKX2|heDXL68o5t+mN=b?z67ZOZWw1^j8Lu-O)4pt^UWeVdm!%#6 z|MiwsN7a%rSA9}J^}IV~*Jj+qb$ab#YH4Rg+E>{_-~qOqoZY~aol%pXzO+3LcKpX- zM^)hB81QU1**~ZK$YLPx>F>5Y0klO{V6tK**5K>(`PkJ6%0-fgsGS;j&?APvf;9(@ zUn5qh&0tBUDqdX$((Zn^l!&U$6S^a3ZX$*`wRSZndup`m#uNR*tLa327Xz>0h8^w> z1(nFXbjm$MUEGS17$z&IPNmMF{%T5a=EQ=F8R$U#I%Ns};M;hQ8)&{ygI?5P?m^BW z0hUa*IFZo5P@>6;>8P_$i=j)<US|8=0%!D>v}*Cvjq!mZ!+$& zE6}st+vcGt+lOUl?{-+~Fx!55x%uG8^DZ_W)2cu_k2-h_!ZsuQotQ}RzKL2ryL|0| z;Dy0RNbNH}mqpua;5hHb0g*9O8$M3XA3hZYVR%GuzhvekJX7C?uM#tezJ5z5na^u! zbFIo~N@nzljpKB(r-S)!U@#&%s1f^T6wsaYQ=K{eZPc(0TOz;dg^8$wyw(-kF$0O% z;p3$8DljP_Lwz%q044ZgPO}SEClc?}7ZG@!)6Bzifc%{^PX_fIBbvKLNgl|c9#FJQ zC3Wl8Wiilb1^Ooc$nC_4$Q;{{1vn@zU>87aI9OJ2cQ35B8;K199L6f^U<)O(11)6= zeA=_vbGjI+^ew-PBVf2*67%!gpl^8DB^Hr=Tx=PPX`59YEw>8rx_vvidP&_|7x!_* z0jwDhRv+_C5((>g*g{Ly58B=f0*p?2DX6~@#?UP_SvtOrcn_$#PU|I$Yz$l*G=aF> zwDbeH3xrD&AU?LcVJ705P@I%QfoqNnY$zj~-R0+Lu1za2a2wq}GwGD?vM$xFe%q6_dYUV+q^yS~XT@-)L8p*kd`Zb2|0g77=C*180#pwzgJg z)<94KmDkqxD@d)~S?H@zIrYm~|Yo&X{iOXgddj<;g>xMQ`{cgX@Q*op! zF)C049LA9(+{>%7Jc}f{JF+X8DaW*8Bd7h}r@m!FWIQprdmqCUg~-~_osrcVS5E>g zlko2!Z9O_V$aODf`I1d5f&63WYeJ(Sq{Pa&v$L~XrKY4>-Z8BbZDw+6D(v;Gmz(on zR=Kbn%(5ckmsXPYuLWBrq|)7wPLyJq;*3|rey-gC(luHFdkEd$xfR3t)!<$W{_->RY;!2SCKxbt)mRp81Svuwu z{!fvU+mYY!$L}OtpfUR~jhF3CkuAI>Dl zp2SLm&9hgk5|z9Lfz;8E!Z8=jSW@}in{R2E8MvH^m69_}e9>PK|Dr%_^oI7sO=~@8 z$<*FvD1b0I@4gXx=8Qw}@P(*hL!R-BPD2pS(GAHPFRhyD2;}n0h54DuIA+(+;cLUq ziNY$!d@qpedq~mipgm7(D(I}F0Ky?+9Qh{aNqOc z-xPp_g-&slXF0CcW|Hg!sK@I3Iy(M!HeE9^+4m#O&M4bo)Po9SLN%&;vYz9yDjXse zv_W~R6Prijz>lA&I=}2~Ud#+-RZ@eRPE#vi7-Nra*R=3ZyZ^A)>NYZ=l)wNZ(a)yV zgm7%Qe~!QX0vobTA^`NNIxMXQ?N}O-X_x>Uj?0X6sVg3X1ZOmgPO?1j+}*)s;9f7O z?%(XPRGUrpih)Mpq?IwgFjr^y#m+XM&MUFu3S1-#@ObFio%f@^p}vHGBGg0<&QLB~ zeQ~_|eM;)Q6LOa^tdIQ0h0*q%sC1F#=IYxp-TFF4=mm>|4GgD+v{%Ob??4|@s|X8O zzghLw7UV%OWI)r-2k+Dx9?=pS59*G`l^9?IrABnW-P6vS9|$z@0I3$AfTqr=_s9*Bn|6B~UNO!PrQ{ z__AWz!f7+wuw%zIL}-`(t{o;sYHFCcUMx5r)8)46g!2$5bNO{_64!^It-$np(3s-`D!B*kD6FEqP4Hp?ToGm zc@1NGecO+rWA2mvb|$gaf{__|;QmfnIYciX~hc}#H&rM%kPxDi6q-gbB?pDD>4j<8xX>|J#wq-_x_t%}_Sz)+|+enX1; zk$aUXDT6y?rK;QO8cj#lbMso}9NG{dJ%V0F3H4jsi1m0EcTP+36*w*!ZiDK_AQyrc zkdE6|apv3&L3nL^2+6Pa-p{4RxBW*ZIZMctChqieBH;&|2@WXy1;E1Zu`FZk90Bem z$9UAwson`;#@#t}7G}k7@oqfc{qcO(Kb!wM%*60#@VKt;4_v;z{nQ??gEOJla3x=o zSZ85YPtnp$PWvA_Z6GTVML|VfGd1_6Ii-Cj-W2cm(vIAi$EvlkWI+ekL8Po7;~dfD zjw%%%HWr$H6eW_eV@$k9JBKdKsfvad?}4oa$7hfwBYHoy$(Q(=6D5S5w+;MKhL8<; zi3<++k#k@$a>kc6-aIJ(N@YtjNnzBIqH4*x6xbU0CrsKIRGkvI0 zy+(Z5Pasa47FV&p%($jT>Q-;Z;NarCt#9r#(BHE7%EPHzfVIimeq+5|0({l#J>lEj zj|*-(YN!eiU;&l{_FOZR@?c&wzIJ?rXW=q3ewvwAC=lfvMR=PCXq$Z-5nzKj)Mc`n znD+R6Jc^S((D?9lo}Uq>LG z5aSctx`TmLda|rl3a*A9&?w;)QJ1G5ukJI~DHb{=ya6(UNf{?6Kcz)VJK^i5jDCC9+=hi>T6|QN zwk$g^40^7lye!vdvFA0zO&L{%d;2(hP_mFwS1j@_b_JuR?;{UIVkees;^uN;OBq2!M%1sR^Nh0i zxL@0uJ+`@DyXw&^WiScER@UUU+ztmI0pgz2e4#=$J+XWz;-Hq;L>iokn44v_2LuzS zPMQ88;=H$Il}_XKsCS95F^Pu2nRMEW0h4#Ixp={CAtk`YW`7(xa1H$}#$h+VaVp7CYCK`}0Di-aMAn2fHGgun_=>%+1l80{-f zL{{C2IA*?rFNzr-(AJoI$-hJ7XNvXT@>#P^%>EQH>?X>{iJhtgfEvR<$VR;A& z9z^Sn>!m@9=_5SY>>Eg6M=iNP0|R9$9#6}=3?V3Sdfe7#Aj|l7FX!hgz|;-)A*Qmi zl6QnPaN-X#8(<~%0XZ)4Az_Q`oF7>#UCVN>(%?sLcF5yVXIp?l&F5a{MA6OG%vQn- zn!LV>bK_7heyh(8LE45`pI8pta9&G@7q)<#4P#jWsy+*6fB81>OQ;~35oc)NMCA!W zeW6MUKBQld$`Fl@bDjn^A_?WbYZjwJd&To0a!9(k( zqQ`!gW|?e|rxwv1r#*ysEE)2-VGn&CX35)ly|9w!?;s2O=D(Gx!uL=`Cx;pUp)ob>q*Ws%tAHH~3QqRJ0s4dW9U zn@!NTvoRwWaguB9Jg(+vp(bPbskS`+x~p05lHlWe-~?p?3!1}?qeSB-1M|9ro-TXK z;PY4lROmUFCc6gdCI$%eh6R7B!Tlvgq)jI$(jnX6r2Mes>EFiAuw^TozUgTKLlRv2 z+nzYQ{55}TYyqD@yP744YI>NwPL*IjzH~Pm{K`zxpyzI`N~SW`ERC^g*JX)(ZgPfl zG%5DWCUq4D>K|~GuA^Cuhff&;T=8x>Y??e#t$aD)r?c3n+;pr?q>N^pz67uhNMhWp zu{|uzq2?PxPA7so(h4jP%17W$NT#r7+c&)@`vMgxF;Vmy^lZx?H8}W!EW*bNxXSJXjV6#p_8vAT()52 za`qkik(k)&HYRWwg5F$szmoH)X`Y@zyXq*CRl0oL9vy2bw7$yabQIvRnYAaF6vcT5DYEd>rFYH5I*d~}@HAK?@rLuebbHzV% z*C=L)3v63MB*w<}!JL7OFf!~e4Ek@(+7e%&aka}>8a1a5%J7OSSgaH3j6{&MsqO5) zL|3o(soo(?j_-i+O`Ap0L8cOIzhc!K$fJ;eMIUg_-kZ*?p0>8D#@I{?F9Yt`d;W&E zR(=%MBG#)3kEy0Ul|ly{nJ4J%jUS~-`pifikLa{aZlfAD3>D(_KM8;-c$ZGFM;@aw z@!N4i6qmU&4Y=PUW*V6_NC8aoqO70`7PX1&JW;qfn9f!uyNE_7NMz$+>?2EQOTJU! z6NF9#e&E=6d%1q-IT4KMPP>z?)Ck=PHF1Lhs+7y&lB#^H(aHri34h3xFk0wF2zwjT zPdr#pWVm3gO~D4PSg3iVW28Ive5U@`+utQ3@KLHgBxEGS7s?~NWh1;>7XIC0t+nnv zF~ApVQO{%XQHfk}$yQTA`$i>!*8Ub?5^uqv=crl_QFxdX7V$2|i$8R^C*C3l{(Km-6iD>?~LAVS-%HDqYtD2IafT16fC2H~ZR zlzlh1bR_TBZOXnFaTLz*YuRCP082D3t=`#_1 zAbef{%(BDU!@PxqL0%W~mx(giK=v0!Ya40tcN#K_{JSto>p?2sg1|r#{NCaQ88kYy zi@@B_P^!+GX#W^n2|I152OeD0NCM^1V~)r_eWQ0?yAHZ+^h)-vtG%$Mzw&5n{7Iv@ zqFnljZqP}xt7NujUf~sSmk+y$3(?o48{Sn3{an$g%vZ$0kQLxc*i)vqwg&VFpe;_4a5zmsU5^rdR zVPcOXnaPcjmnH45v<5M{7%~508iD3<@R~Q}%1`4mQoInGV%q<$qHH%06cJ8gU@`?| zn2Vs>fxwgyywk_iLl6H>|gzzpJw7ZdU)*|-$t z47XQYe-{ZkK>4%6TQujJnrosfbBA^p1RWnMiR?Zw- z<=XCmiwE0UBj0x**~!D=+^lH8SYDWj+t?&OEEz45*Rohw&AO&;)?32kmt@`y5LI%D zp`Jvoy=ZN1!7^_?@6sP)+vE9Ts*o7*>11eAS7-hp)|62>s*{q?s)Nz+In@q1N9K;7 zMUSaL92#5%;(GF?`_x%AR^f&2IMtoO)JA5jq04@} zE@$C%SQm9?2mZrBUwkzb#3Abi%-2(3^MEzQu3lVZg3S{e-NE?M<44M5c>+3el?2H1 zk!rzLM;nOqb6qcqcVHj2(e!vlQ7NtQPrb3knNNSGT{gJU%{WS&Zd}}I(%MQuvgRmo zQd_3(uLd%38+EY6p1S6-Zva_-4bS9cX3Oc`J}Im|lZmG>dgLF%+;IG6k)82j&Raj- zf>8PT##?{cGFteU!&`qe_40AY8?xDw(Ps=Fy#3LFVA}@WPh=NUx1Sr&oWA5_TU;Up zEGxF3nVrNdeqCM4>9!h1qt0AiBAK!3bo!caKLtdLZ-Fg?T6GmE9CO$$uI#l982Jjs z>%Mm}>U>IhnX?6+t*DsOd$1yx(~MrF}2Y51YCQex@SSB_CVxS1Xh~ z@D$EXXoSc2VB2!1W+`i>0>_^|A^cU;6j1)xi+rIph5gr_pn}3E#fbmwNd9pp z#Q)TP;xot{v_mNaHHrgz#~}uNQeuEKsfZwnK+aT*#Q!QPpg=(UtBUoXi+}JlXam$r lB|>3A2?3$`O-)@^SxH467Vh5-_OjBVvAdFcZc8>>X;O*UYp$HC<0lP5<6$HAQ#?e8B$|D1R!Y9PC{n_AZ=i|GyUs;JNO92JxTU zzr7@_?7_|+nl2u;kPns+h|5<4MF(;nx9|4zba8A8Ul=sJ<*n7N^+@Bo!m|Jp@d>lT zVSWDisBVMRttf>}2X5}tQ`(m1vGI8U?JwfChY|gVKEv|^z$u}-yO{jb>i^@x>oAg%&v#LxWm%W&~#s|bNslPff z=%)*a@?a7kwUD+nbnn(|z1#>1yi!h01xm zhcB&Z#^BoIx{QE4tQ;_uBKYZ*wbgGah+S`E(siopRm2L_m*yS16Y~4w-@BTDhs3S$KJLtqw?r8$-w8{8-J^VB7x)CRuB%)mC zgapBbel3lS9@s6Y62h?&o?_8ydVAlm^BV{n`T?CMKXkAAXH}OPKK*1~XB>N{@es!6 za!Yr8zd>>K(?YyN42frlouMGmAX1EnwKGsC_k{~gs>oUDe)ko*m{sudxZr7XA@&(k z?y)%48@N{t@}A_suw?hX?7^9#`skD3*)IL_ z)Y1pRPdK<`eXsLSyvQ!2D0-u8m$?RcoBy@><6I3ZckewfHO~kG9HtEr3-`ozJ~Z{c zh-=uU;NtlP{g$Z;1Tmsv70Gm3{+`2|eKz_RNhlKVtR*O`|TUgz=Sb`$Id~hF*xg)wR^{ zdQ0_0{+dpJsN8lG7dM_hZ!XQO&LXZ`O2D-)$oq*&ystoW-%SNM$ps{mP`BUJcbpj3 z5?ckx=l|-be!8XgJu}Q+md<1S#UwL@mU))m71K9|(KuCi{Y#PjO1-GaJ-+gLGXqDl zz8u7}-(^R5aXl+}Pk|yNZx%gqY6U_Jb+yd7zRm3nKgG+V=20G$JeV6)1c;<(DP-fB z?Tv8r6>lBIH>9IfkrzWUU2dZh&%)EA4rVzuxck`k;aw}F3l>BlqB7E-T9JUz3(rZ zbKd~tlLk55N0`yR9LwZ~cn)pY`NKzkc?zN4YfwGvd91?wTJ(J<4i5$@#NMZ>3Uni4 z9S1Jf0u5zZOUrJ=z#|N0l^iTtTa3Id2W)7~KVYAer|BlHf9lX`k+xFq6?&~M2b+++ zX=lrN8EorLZ8w_sDV8*b5@9iq6&mh|1R0a3o1(>lLqg8>&3rP#1VIHaPL*uYbencOhBSZ|joBi(voAeP?gNVp{7u|?Yq zlkU5b^AcS7U0hw(NKT*It<;L|FTLSV#;h(&l!DDxJ;zDB3gn@XRAamfGcrxJJO*n% zpwV8x{cgHj)BWHb1Zr&3=eZmqWn_;fd9oe%~V@ zLNB$8Sg+RLFI3uo7?#ZE?Z|gumu)|`^QdTK5KPIs`#RkMXPS40E^B8RM)Rk=+p z-zsbnIu2%1h9dhLvS7HB;n)844C>yzSQ=E&M#PX-#rin}5k@ZTA2~j!cNK*AbbD>P zy*PW6R0mjnto=!r?|2ejpr}b3Y{Wi!5mFveHHXVOTvNd#gCn&RBLE0$$pC3s?F;AL zjaz%BRnQ#DqsyVWv&Q&ioAV#?ei4!p>zrdt)sn7spRMy&GvbOlOg5VGmw?5mZ8++t&dd+3bK0 zHSamKZ1e*Bx`pL#0F(BwtEA^@&*C?aN=&NwlGJLE{bL^_c&7{2@1B^!p5j8|u94{( z7q5r*OkI$+ec1Z&XCw1d5iF*xUQgP@rtprIyyFwd;EMC+nD9Uh3%!^~kC0n+XTyE9 z@$P$lHecg+uGFM)XOZ;>Z>0_8R47>w#{-Cli*=m+gy@|4e2N`hyaVqp_~mRg%s1=@ zk>|MZdu?q>XrYzss9N)2)UpKeKnAj74UJ(^HNB3kP{Rq6Wv)BE>G+lB^EF?b8!F|65CkxHUdXegmDhM_7Ewnwk*m zeXBOXwdafR_!Ea@dxB=XbqdXH1*R$4*B;A+9TYLN>9PdDIx$_rjiDdQGJjgcmp;aB zlH>GzlkqbdBr)*6Id@B?8Toy#BxSrNzA;oSo*wFWQRZ4{m>S-volE}v=bX-2ESIQ| z#Z2Z?&5HdNpT?}1O&U{|O1I0%@mP_4Lf_#Uxkatut>K%ELP7Oti@w?+RGOg;b z=yxZ5uVR|6%(|~V(8oh86;}cU-12Kc8eHRha%pQ8%$S$DeheiNhEDmyeXk<8p<&;?y+AuL=xCKJF za#PUQ(^6H6yrLp8k-2d{0?pTpaUa*klb$OmBGKO5x%;4ub5+xq4^S$?#patl-{U`D z>X-F=it2_Hud; zsgIsgrTIc|{ymIXxahov9oBstQ#NIe2<~;is}i0>ylk(a5u~5}cYrMD427xO1?>T9 zb9rFN@qU5zshJNxJYv+ITY$Nl`@|uaHu{X!*|6ZTJ*HK^3%rm*J8r{MZlSmXzJ6T= z;=_wVy>LT2h;ohy*0*x+kBT;ubB^YCe3$G#Sqb(BB9W3OJ$h1E<-V--9(R{szwxH| zu=oINc(Etdx6J&@rCfJ7fX^dFt7>Qj)^a~=gwx|&LNk5}jYdAI$p}W)H^j#YFh>}< z$wQG;^3_lAWj3oSKv+vys0wtPJVq^+dGw|kI|J;lnSOtd-nPh zF_F^~qyxsue93b@5?u5 zsjks0-}u+|WoB%&yl<<9uRoy$1rn2p*=7f{Aki6#dDB?&=bZam6rT}@rF9L32_Lt@=wr#iNSMtV8d zQVg+ZmrnvZw%$Ty+_ALrle`>=VqGltXTH^LUf&#fxR>e6nbi+)IF7HQ6fp);nd7Gx}4TW3spj^&$zxtO?=Db#rqO zt}Hv3F_=hsBlsd>oJcWy_>{++5VaRnj8*OQa$O93`qt41DK#+#JK z<{2qP_q9aW1f#=yNevCp4iGQ<=vTf3ZuIV-YlnkxOMdYigL0nX;cvXqj9l4yICmVEwAiEczOMVrEX40PPY|e^ zT7MFlGtBYW0MjVIj)Xdumhnt#AdBaJ#ziF8VrD?YO;s~cMOMk;&XeN^ zue4V!h^^c=k~zhwE86Wd=X{BES@QJ-ak`@u>bBy;ghdWfvgZiSxut#|JAz8;E1fyR zz*n8Cw@othR+EZtA9eQg9zc=uQvEjqfFCs$dDQPW(%a`^zk&tFf^`%4v0T znBjG+kprS~c1+m>-_P&KgMG9J-iUj9u_4+G2oEaAf@zw9Om_%4mO{xXa`-(SOt zousJ1$Xrv%P_yg6W346)Kdd`l!i2yX-xZEUC+Z}sS3X^&D9cc8_J*7hW{?4OA%-O> zdNTLE4GD7u!t9lK;6QhRZyr-fIyH-u?2c+2gNEkIeHt^IwOJSDu9@9qMs4sJ4^h7! zGPGvOqoMP17?~PopMj0QuY>WxgL{@=kkI8mX)dYA*ZT*@87jq_^9S*g4Rhw&_66v{ zvDpMBe|0c*SDdb3-TIos%_bXL=xY9zAyIw#n6|hW^ctKKgb5?ZkEGtGRj92duEWZ8 z?_C!lMH8BqjOk^;UG#>3m>$3#}ErT+PU71yr8&uS18|D z*J#frLfe^9Ggb0%{gMJwV%ZnY5ShCwV;Cb-dh>N)ol3$Cv!b02D$e%#*IKdwmp%>W z?sN@BhFG^X{>r%56);2;7Bcf*=y13E$Bpz%23F!jx#R<068j=m&YAR35CY9hg}IZYYwM!|1`khzhab+JpIL^4;s zghiyfcrSHNQYmAF+pPQsWT`l6=aV25_s)8-*+$5*86je`v|jnmDvOjJ+*TQ|RiGaS z-l3|NRR8UJQ2YixS*o{VX|50=Uvx2=Ajtf(Uk1eEeXMsbF8brj1!k!Y!Cv8u@2${Crr??0+Hj1Yj#w@gWm2;fGVR>VpjtPqN zUeQA8cf(&e;#iuJBNZrLT&FwDZ<6e?;U}K8y}E1ZLJ{=T>}g71#0Pw1;{Ds)#$007gUJmkMm zG?M*GqEQL#;o$1>C+%o%W#Q@!cCm7>H#Igk2AkbH<-nl;TJLzeG5&OaF8^MT~`&G5@39zh*+!oFV2AXNbKig(O-jtDf}BGT;y28qGj=V=l;$Q$Q*_t~;VG%(oRN*Vh@EDi4YAtfFA$ z4?rT7^;?ROiK_Cw-SyfOjl!cu8qM6Ea7(I$q8d`Z6LBasStjN8t0J2oH}htus?gT) z8sr{8%4z;xk5*zl@+q4spVm&Tc&c!N4qhxJ!YcZ3Ih zW!E^u_PePu=6Ppt4K>YE3;s=Iwkl3EB_6G@j-2&Z{Hvd8jQ>7 z^RX5f)ra({Oh}L7pY%dEgQQDJ%=4P*6E9liw?R@iDn7s1>;1$w#1#9`uL80{#V~!B z)rV1^qU!_K*Uh;yRX5NnYu^yt z)fdDGd-xEdz4%R#*t?xC8DIHQ;XtF-+-SGO#;GzLP%Mnlqpnq@2{F|qr8gTe5v%xB zg6S1_88{TEnkrY%*_e|RGa8GX?Vk+B$8o;Uz2f8pUWxnE-OWmagha_yM=5InvF`6b zi@+Y-Cm&Z@M3!}}&euBU9!t_FPBGFY% zjWG7D9^K}>?B+5IEvfXv5qiI%3mFR64z(Wj3(FHn75&9_G&8BFH?2cwLt&?Blk(yR z)6D^niDol<&_VuupO6U?+62sk%XJx?8$H@>FXd9EfU{Brz#OJqtqyIKKtJNymZiDq zb?y?{hAXHNEiwW|4O?T{5IuJ0Hdk|_;&I3V6x8i?E7pGTz*B_ylj)w54gvd82tVKk z@~L-dp~NXeBl0_J@b>@(Wl$_uMZVGn!OxWVUcIc--Xr7^f{Xns^Fiki47xP#GH{oj zQDr~74cVA@<)LWfX{I2pRV46>8xe|ucF`LOr~{Rsx<#bXN3Nur$)ba7Rq6dR91cIW z?9V`#Qn4nm%)Kpt*9m#qD}BeERri`!bT^*~qu-g2_S{bmcG>M%t&@M=?#!`Vz0A|S zY2zL>0js4)7uvg=`i1uz*WAk*x5@l#v=tL&t~NZ!W_AylpW1?ZnR!>#QjE2hpeO{D zCjgl`eRjF%1(bdC*A=yzQwx8UQzz(5?vR@G$g`Nr<49+JIBFnMdY3ExZU4s;3`at^b|n(%YOyjf6xE%C z5~wrJ8@l&1CnUSvb&xq+AvqH7*BMcXxKw@6Z8m8MxK#;p465|SELSxq{+hYb@m$9e z^Aq>P8;eP4o8%i3(oz{^uP1O$p~ zwp%>uHj{$51^c8Bi!q%OH2xdI+&md%p0N3rlJwXE zN5ok+Du$I+GU(W44LMA}>+`V8v0+58>|=Bd6kLZohIrYe*TBBhWCh%q&sQh-NQu1# zGsfQzX!GVoICtj$$b|EqSu+;G`{F}G2?q~eGNv|KF=>!LbV`mmdD7~qkq#nJV^G6) z5`wz{QX1>@4heLNs$xVQhF4M7SilBz9%6AXktNR+Hws&_UGimNMZz}#5C;`y|hQf$D`HR5%!VZ31oxxC=lRdWuA3Z=@I&N#9 z%U^xmfNsXTVC*<^U3AZ)-JDcjT5X<@A63llJF2-G2rJ=kg$*>wIStWQHf#Vh>E4!1 z(E`MyP*qW`=>*j+srv$ZqHFa%9hjeBIEe`xj!JHUKK)VDD0wQtA7hX!)CX0Rea^x8 zC2;cW1Y%6Vn`VOOO_M2vH10Yt8SEAOc$~pHmOaz@dV=m1!hsNrMk_Z@^J~3@|8c)Ghw^$MOcG`t^DJQHWNE>Fx;$!RDZBy4>9P?4np;0t9YD z?$%QxvsUR6yP*FtCTNJzSq-g;Em`UpH;W@el8apGgO1F39VjqkZO}-;9drMF@ zw+(}HJEC=P8z)VO+Hf4xD$jT*cSrHx^5sfL0Nb)_AmN z-x^cpsTrz--*O+xW?ix}+NFtIDwW8YQXlJHr>(H#Y)irApQDr&o~uFkmp^>l6T_$W zjDuQxVk4G4iq>a5O2L_&pp==Ps6pqOcHY*wjs`IQ61(L%(KB)xFjL<$X#SBcQ|gmb z&;OxFzP1lMM~EU&?arkLR6SB~I7syneqyOG@J>pFG}+qae5>}AZu(v$--MOas~=fe zU#AzT#-I_;H7I4O(cC9jA-}8r>2g|Qul$n&rZ<9K?|h4C*>&5{_i6A_E9P{UL*yk) zW6uw3`m-?1^Xb5JsU30p;mTZhV*zxgTovR$A|hk2z~slUG^-n#^ObCgs_FD)lT$_2 zuO+VOu=i94Yj%~td^O7iQU)x*OYNp**ll9d2K60H=gL*fx-2;%m#e~+2kk!K%A6&n zL(KMtcBw8S_LNacuLI;WeMb|EWX# zQ`8jUfB^V^zkT9Qmp_36c#?QN|6N)C9rbrR#WVjrv(GaFJwwFbcnV$zd{s~I|RC)I3*`H^hp6TRoJO!Npi^_kq%0I_HyY=kUvt!Rr{*9*qWSal- XRZS5Q>A3;<&(RA90Eqr+0s#IWccw@} literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/special-notes/grace-notes.gp5 b/test-data/visual-tests/special-notes/grace-notes.gp5 deleted file mode 100644 index 63d926b050b18eb1a96995133640a91d56aa3650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1491 zcmeHH%TB^T6dm3LHR3{p3(aiC-~tsBbm4|l5t@LIwuHFSN+(Dp)Raf$3*Gxecy22} zO*AaTl_xoK=gv8I9_?f@SGrc!%LcEsbW1gO(`fKX;V6H?*xl_*IK+Tu8}br-{}R#h z-JhCQWQV9vArd#=BUxu51#LoDx>YNSHByAxDg|j0sUlRv(oIVQKDAbA)x{Qsbldfu zA-|t;(QX)*W-wSE4|^Sdu--CtP3*(D7dQ|2Li8&F#||9Zn)@{MdfkT+7h0ovW9XHt zCC;D})PA2Eqzt(shtiu!hv&FH7)ftnk9zLF?(;>pDLZ3NIvc25Z`xhS#kDvVP2r!U z?mE)5NAekJfL(+QIvB9(KCSUrYpvoe|NEyeu=;!Q-M^!?fBXK-mIAFz&ks?HMi~nO z=qm}!vpbJGkN(eyLoR|B;5m2-=D;jSTbR#Ivt~fT4Ae-NgPyBUI1-J;6G}2Qi+tTX t`Fwv+gna_hY$(FgEF5Pvx1Yz5$B_Fr=n3S?2R(^A8D|l=$x;Lvdjnx^mJa{` diff --git a/test-data/visual-tests/special-notes/tied-notes.gp b/test-data/visual-tests/special-notes/tied-notes.gp new file mode 100644 index 0000000000000000000000000000000000000000..8e6fc74933d7d09eededad4eaa656669741166c9 GIT binary patch literal 9203 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 bvl-I=j;n$+G|Za=_RrG~0RUi=y|w-W;%&Wu literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/special-notes/tied-notes.gp5 b/test-data/visual-tests/special-notes/tied-notes.gp5 deleted file mode 100644 index 765fb27cf0a2002314c9ce5d0acac9b88ec4441f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmeHHOHaZ;5bgp3qT(wWJ!s~#Mh~c%pa(D1`f4IV+7jcj(iMq>nm!2pO%wl#cbwT( zQ4*|uoJf$(N9bGqg>1@KG0!)si2 zQt>?zxRK~#RACjT8EOnM?ltZ4S9^`4m;dwA6Bz$@^4+_my?^`r8H@zlIf0}r$VjEo zK#&uW%{YPExQC)Le;CskDRbD|721tXPZ=frSC6cL$bS68Q z8zjG;pLC1J1-;?NVT4yv0glD38@D66_44m-$M1+xlfOPo083ILO9PwGK()ql9}Seq iV~`~IQ8G00z!I7w71LOrD!ozlR+bUjrdm=_wR!<@RHje> diff --git a/test-data/visual-tests/special-tracks/grand-staff.gp b/test-data/visual-tests/special-tracks/grand-staff.gp new file mode 100644 index 0000000000000000000000000000000000000000..5abeb65d3cebc73edee58fc40cfbcc1c66797e35 GIT binary patch literal 9715 zcmaKy1yCJJx3{VNL&;;rw$2kxKdUs*QDLO37_=lc(1?C<9!oN=o*-{1mF z6D2-EZs|ent^ij(kJW0k7;I$PKHoYJt>0#WBV$yB+`z|J;p#FwH&9#La!P?s`|rvF z`%V+bClw^KI`HFc8*}<)o-bT|pB7U3F;*RRqynE8$vFlc)-+E|K|9Uiw+!Peqp<~Z z3=ReC_H0`hQm(ydqhz6k`<2iWI>E0lVaM^N1I^PXXD+u5>CtP2Q#ORou6(O|yWs-nu>wieus# ztIN`Tx-vJSz6$g75$AnDk$E1XHvCX4PCxX-p5ZVq=c$W>LHzKXlI61%b0s$3)&{Ri zOkC{|?l}!W&R2vmhmO=MN-h#on|I0NlkmMa4ZRCAYH;R-n&^%_iWPLu?C%M5D&h=p zn=NGo4LZET7jSyN^OGCKvkuA^RXI{wXU+~w{|qf9>pJ+CS?@yubLW$lawhE+d1qE1 zHLVO{u|AH&H?&w1C_~=?bdLLnfscy(R^8r0a8Gev4M&xiuP;N;vn!!Ysq;v@g~T)6 z0Ji7t>+5UJ4F$L*2hrI}<+KqDbEmhYq4|iS!9;BeG2212#NIbQ zW51N5hj9^F1&p|KRgH0XPQeEZpgl`1L6j%%V37kHh$vfdp@`QF!3yoS}ymIt81Nb32uw0@LLfXCi^yPs1_}Ed% zXZA1<>vPY%&h_iVMSx~dzY8l_pg(aVx*zlg1zQJl_igwwu%`gu_jf5di(kkZ@=4xt z4125>U%cB2I5FCd!0Z&T4&R$10e*1FG;=6{wMVPo)HJlIeK83QpcT@h8SNqHHVF=< zss}z_OhB;1gO$xavlILZX~!h(V|KD_6M{f{R`2h}sn;3vRrhXULK1CoiDauDNNyf? zNcUN=g=dSdnCUt)mpCpbSKTO-_@QE^Ma%}$%zRmWJRR)oep+Iq1&?V<7HM!i3^i`F z8So?QT+1v_6Ge6kyi&UJMm1k|F*OG1X{zn9l>gixdySI;hOCj`YpYIV@}Bc2?Evgj4U^kimi;ckC9 zCw4ZhN5*RoM}Px}cexX_;l#h5o_$wJIHh~8z zeQ6>;ZbGMT7SC2-OL)KJ+&=ts#qV=#q2V9mybL7s^UI9|_Ept(1t&8y>QKDbe9b6=u zy5kq6DzpbGn)Hg}-Y@t2)zx%fkZ_Y`*YWZ}P6r+r0M7!2F0*|@jA}DH)t*W8dTmIc z$2TnZqAaGTBOk1fskq;?os54RnsY(fg`7ym!LS0sy#95#gahxGUxN8l>E@cART*yl zu8?D5RTI25UmS}sQrfK6)xW>v-YsXS9{fYJ_Cq zJ%HrEpg-Ry?q|1OBh?>=jEF$R zpIy|x#I+^!h7WLH$h7Ky^k)3d?* zTxm7Ped(NB6K$N^i}Ht;y;V!5iOzJyOd6RUFZH(jAQXtgndne5)rZ_vIdUbMVT|C< zP($_r!L5AG#x{c`#uw2cQfbtOQZTt{!RMcp=awsIN;zNg@gmJ9hhCH(Vy8J)=;bbe z!0P(3hFLGoO@jl)D&IvPfGvb~AFsdkJS96NLkIz9Re@O{QSZvca@jkDoieXUuKl?%VltN4&6L_aX8p7FKnZ^A?69?6{EKr8*ya}W-QXEK0~VaH0d89*y~wJ zu6Oh4Dmew2`Og$v`s9WW7~>$n61R{1XS)>>07 zrBNt!RR*XH*9Jum{VQqmWxCYo-uHFxSN|c}eGSX=u>alRvOJ7EE_sZo^F}a4@Yt3(yt^4$wzTh)r=ydQV zF+*w7!lAfWPv__MioPt=Uw&ljoTWlgcvlT@XKt9~@Mu%o+caiXq(tR4S9qqyzN$y4 zxrvko=CwKmN)V6xC&OZy*Fbjz|KQgswviW8@8IYCtkviuaq%@gx?JY0XUQp+A}QwO z(M#W(Wye}O_+_BP6~#$^#qB+k)dI)bD5ulNuc+SmJnabUcQBLO%8k(S`RQ$AvL5OZ zWB6PcRLrACJYS)<(&H;y;jtI#w-8M&EMOdV*`*U$_C(sH1un$!! z_t5*}^|>}#W}(`oEY+XV8ol(4cvWK}S|5a{XCI#};M-|IfwN7i2kle6!!!_k)tY*J z?cA)u1-FGUUpWtO&x;XPk|6V&0Bng0Yav1M2@O{3v20*@t2+pIeoACAZaMR&B zl0t@)#6hYhl*51^3{x;?qjR(M?bxnPV|J=B9F zb9lMuEppW&*>Th;2D@WH6wkLC9#VAn8twb z)&i+k=G=5Ly=?(RQ$5igzl6fGUaa1g;35xFSSO?am2my^T@tnzwx^PIbx^w6xr=P!P^atAIV_B&h)CoKID4JL&pMNR!nZ1#;o=gmSGgEHA`#t|9FIh>VRCg*Bv%u;0s=$bz&7&V%YEtPSX7XPf`EUi?HU2PGz5KV21iYsWkINq{AqRUwp|J z7HJ7d8ryGy#{EuB%UU*~FT!EMmhmj#V=ncthm+kS@HcL_+A4#ha5EcC5LWS&ZiuW6 zpzrZAux%qP1JZY6xYv{}LCt=2+g63Y?duxJZ#q9^8f0&%L)u|#{&tP#DfPk-;##?m zS}TSzE@a5NFG0r0Zw}18z;rQAQF7-^=PZ1_Ns!r-Hxb7mKa1v$bE1qg6BQ*ghHu-4 zAJT#sea8(ZsT_7%gD-q8C18!hOls7$X>esKSBMCU zU?R-Vdp^J_bYhY#OlZgt=}FQ35hjF`iZwlINm^omYP6QIcV?D=iD0QvbUxK;zJvv$ zDh7xrYu$mVcC2Up@=-POky=?-fHY+4*bM_(1QGP<-wbKPUA(tEzv?&kK!-EKxK5Da z5%TqEcyo{bZg!yL3XU&zrUMJ5KugnE#Ze2GN?_Y=7*CEO1xBbLqtOMS;T5u9tNc`! z74SCj?Ny0LCP&EkXMQ}UWQfLJcAHh(TZkw4!t}91-m)p-r6fSuW|X6Tnp|7_5GV7p zpKwcxB~An*@oR%*H;}QDQ5>vRs~axAS>9e*?eZ!jf<~@IYK+E+$K9>Xsn3wx^fQBD zA)3x5x-6Gw(VmYvWxRZvvU8k`nM3{@dp!-u!cw)hkR6&4hy7)t-OLXh}=HZEH~xp!&$@f)eKvRmPBQ=w3pgyY5bQbH1)h0HQepGTOvzlq8|f{W5u*CRvqC>e&cH- zx>+UtF!zxz_)*_9XZ5^ZgS`_Ctwy>J581DJpJw8oD^N1LLZ@Zxt}?eN{RQD7z=x%T zu7v>oeEmaxOgSo=D!P?DEXTkXE@3O|-ok*HsnMZEAfx}9C>dc1{~a3leAh#U@MG_A zGm#=VFMrBKMj-pw*cH)$oEP7(C4?{7=syX&rRl!NllKQ*2G;_XR zvp1wznVIVqEiG@703Fjf!;ko3Fm<2aoldU^vx!UIJ^}%WbWzx6>XvF&*~8*py)!j| zR6)v^YP|0{X^mKAFGMfU<(xYw8M3RaYA01ds`=F~2(3>kL6hstdOaQOAf<-YNfavV zrBX4ab$~FhxCCsGRs6JQfFR5Etk2B!eBRoJ=Fc^bSci^~?7`!W0GsqUjZ+SvrwGq# z6^&{&Bj^ta5p(ep3dI}69nr!0W<8SkGLw#3I`%Ph)l1~&}RppGm)N#MX0#=N5Z0r+(| z*D+txooZMrg7NA*h@g2J&8_|dzS1ISD|5@ZXSnf*lY`j%wPLd5w`f&D(NnG*xi^-h zx)_&eTt%C62xgo+mNqQy6FpR&XNjc=7T+FKb4_hg<1uUbM6m85sXDEGQ!2uViXX4(#3A%`n*Wt6#<~u!*u)DTxlHJ9teDyrgrKj^R*+ zwO56Tw3KRyd4>n9cl*#|eKnXwKYyc?1-s(!^IhEFmHR@PCu{7y zHW_F(Gtoo$Dbj^QyX&hZP;r+lBG*@h`@_<+&BdknpN|{~yZ+2S;Qw3$`k$|V)px-r zc8+FDKzmE`Q@vyGGAH_LRVUP(LY0AHp0EHR{mGr)#LsXmo^g4;EJO(rZ0iU$>5o-s zdoQ=kuy+j#ED@q|QQM0!U3&aCjR+@9W*+Aw>)=Q)qbeZp%`&g|Y6XTl{&-)V-TJ(@ zpzYOhr$v4D&+{iWT@Xd-JU)#BtetKxGnIPSh~Q(<2-Rf9lA0yq2SlJC@P@+1dXA&b zsU|WG>46(Cpnw^h25j03An*Q(I^cC8$p{Mh{li}O-GX(Zjy(R;)!@`c_jNaMafh5D z!;FdVODPhjJ4V>ELx|!^OuBU-bV>$M>@S16M9<6Ql><&5)2N9|=22{ZNK$)E6W{E^ zPYrYLhzVV{%+7`ymNuqu$~H>Yqsp2Mgb4DTu@U5iP*TP zxMv2dh8P^bP7uaEy=cQLqR+kCZy3~D7l!zTAiG+Iw8pc-u9-|@Q;DRgu&^!mocug| zCF2Mch?k?YWcY4u$#A?$(Z+jxZCT+mb#D<14ix~_H#t=(Du8GBp5o@)eMxLx;3sUj8J%S5_pbUx&`o7nIS==H)B ze9v>v$>q+cL;s4+Ic*yom1?axV{O%wZrDM>_Gim8eFS%=v9P~@LtQOAJc$73eo;_i zU;$I%d$oBkh11reSoMw-bQW* zws~k{=$dK;2zR~rx|&3av6eOPr;?I~;b0l|WYhy2OBx-Lw){%oeugarFsY<}rU zm#apTxve^!#KoaKFv|-&C-_b(+{qxmA-B*q09vir0^`&4oRbL2in#PTqzgcm!&yhW z)FL#?YOjf30X!X6y0wgZq!Uv<)lQX{MU-cSU*KgEppU+6-PGFP_ZYty#!W$fjukH{ zF1DI(@Q?|}3pKN7xcX|j9@BS$cd{oO_vaTI-;5K?vB1;}G*11T+Uw44%#S$|4jT~q zJu3`WiWRM;JHWHMGN^-qr(>)>Mh!;`viBRV%UOTFeO%s9G+subr$JD(NGJJ$IqUo> zA0RlPYQ!{tQ>S*5@(Aq*T9Iy!qJtw%TN4>N6`}yL()YmWyx?KK#SoWq-(+wa-BbjD?ECrsS00x2`%4xOYwG?G z``o)<-pICw*rKe$iI#A*#!R|Tfeq>M#gyX3rV{0SceDVtq^NfQvG47{+koZN=AJ?% z0*D+_ll9mTjY^x1v98keJeLORXinrZGE1xea4!1YwdsI;5Hk)U9 zGXxkQ@uHDo(!uPQYZHf;pmcXO)y~&Zi>WdGaMQN<9NwyKDiu}yNsVtrxScrIL?=JF zTC5`=;S|nRa2`^%lvIb7O9Z@%+FgwrA+P6>e82B5POXL~tUkgJ9+2a<-*lTW$*-b8 zHSr4x4sJ?@(y+7%XH@7$3{N_PAm1akXXl1VrI;oj$2PFx_NQ8=w0OF%aRVgBSAvig zw#NYqUNKKSyu&MS!MmC8*W?%yJ2DK0FcS$xerV!34^y;(lTNdNqJ@c3 z{)ScO3Me~^4+nHNal4c1z89;0?-`PeWSQVU`gk~NB5EvBO4XQ59H$ZQ_(gC4XD@g> zWCa!*F-BzyS1noOWk=e8yO?R42GnM}zNL+!6GGzsBN(%%9UWA`-#K*{75lr`y?ef? zROc8e(=eIN!|Jdx8*W^lNu2zp+n=nwIZN-6^NNHMb@S3)yH#e1aN05f`DulGmGeyY zxB9fw+_+cbF=+b2t?9V9!NWlz$E37q#hu8%SP0U0ErBx(Lr^MKS40DdwJtT-F7{qm zwgq*)wsc#$b|4HA7|$~Ep01xhKK=PHdG{g3FQE0_>HA~w0C}W6ke9#L1QIy`;ba}i{8EApIUxGjIpCFceuST z1Cy&^)9s|l|B;ZWi7DvkMn9bVd2LWE3gv9eIZ}U5`oZlxIkg12#em%~%hJ@_pL>7? z8DJ~*B4zt&wqeeR?JW$g=1_75;4@&=Q7q3^v~fXg+7nn~6fvfHR&dyU*%ffVgvyb< zc-Jh1qAG;4)Z^?5@a}<1nnlAf*y?+V?=M=y3tGI1fQ@sf z812=PZ-m%!-z9fXJ{QjSSciIYJk3wruQQR&UmfxVG=6sq_0*nu!3TTy$g}N=aQ9#nR*}Qt-D;|gEvb7(31PkqIL*Vlvh?+OYwgj> zVP;PoT)<9lkM(k^A(L5#BHq!cy~Cb|Ub!cGbfdvQ!GXX#S@*5ED6+y--pIiX;V#g^AH5Cw=`*H#xZpS>OPHYrTqn1#L49^CA zJ-85Qxx-CiIN`-UIx`U|50J3Ft^M@p;dxtY@fkL9{LEyk3LbmaShFO!=B|c@I9%~_ z+=1;h-LQmlBkcORUbo!XFZF(y8yCWG{m*f^u)T+;!TAPwG<2x?zdpZSAR&Z+og~v< zhVQNNOrWW@pUZ@6YR8P3G;~?oN^GLB=N{B@$>L%rYU6w>b~0?ETp8{2;fbf_lk4+N zj9?pa6;$;F_4W2GVxj)ioP38r$)#)!KMRFK#A;*!C&VFB9mW%^XA_lAzp~tmV*z#t zQU!iH5`&veK(gk(33C)GdJh-BA(Z!ZInlW@?+^4gRVaf5&7EuX-}R_JaNE*~0}t9qAUE_Sg$hSofP~+aq%Urm;?5Eh^c7#I~SW) zpme-4t!Y6YpRIj2ZYM3R=xS-LbkSp-ALFP6C0Q@52RYm6kXI+v>fg4lMS&asmGSy5 z^!20X-CBe3sy6ZzX4r&7Zabi zx@M@{yVl!^wVxq{-{4Q+sU|$k_QpBErYVVh1!mL}UCU{$)D|0 zvIISAPl0u(-!6f{S@8+a7tUb1F-N^RyUW25#ayiQ+WFh5dH1fLTDJ~2=3aFQ;bvGX zX8V)+*@67)U{q}v^va;1L;W2r=MEnnnK z0ui%-0Fk$kiq94s6Xgp$^QRv|>X#YStpu-a#w#!a(huz93T)F%IanJiGrH7wu1h&P zs#|#Uz}`#M${XLW8^-&M;SdnnfAI7_)9(8}WT!5nqAH`L$hN=+0TGJPdI|lf5B6U? z2nhuN{h!YT{Ym)~s1UCrZ_mH@@RQvC8}-*Yp*M_wL-;q8e`Ddl;?Y;{Z{q&v_&2xSoO*NY&B?#w)qjKh Z|NHt$4))#KhxdQ3K}ZM)Y>Kzme*qLo*-HQb literal 0 HcmV?d00001 diff --git a/test-data/visual-tests/special-tracks/grand-staff.gpx b/test-data/visual-tests/special-tracks/grand-staff.gpx deleted file mode 100644 index d606ca7b54435f331cfce894daa07ae9286b8f6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16261 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 O|GXsspNrBaLH{4o;FFO6 diff --git a/test-data/visual-tests/special-tracks/percussion.gp b/test-data/visual-tests/special-tracks/percussion.gp index 1ab80cb89cde669693a17ba49ef9a1c2c014ac63..a9d3587120cd206dc927a09c0d7a95ff25d2ea53 100644 GIT binary patch literal 19629 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 literal 19671 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 { it('markers', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/markers.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/markers.gp'); }); it('tempo', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/tempo.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/tempo.gp'); }); it('text', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/text.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/text.gp'); }); it('chords', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/chords.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/chords.gp'); }); it('vibrato', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/vibrato.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/vibrato.gp'); }); it('dynamics', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/dynamics.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/dynamics.gp'); }); it('tap', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/tap.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/tap.gp'); }); it('fade-in', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/fade-in.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/fade-in.gp'); }); it('let-ring', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/let-ring.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/let-ring.gp'); }); it('palm-mute', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/palm-mute.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/palm-mute.gp'); }); it('bends', async () => { @@ -50,27 +50,27 @@ describe('EffectsAndAnnotationsTests', () => { }); it('tremolo-picking', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/tremolo-picking.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/tremolo-picking.gp'); }); it('brush', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/brush.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/brush.gp'); }); it('slides', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/slides.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/slides.gp'); }); it('trill', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/trill.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/trill.gp'); }); it('pickStroke', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/pick-stroke.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/pick-stroke.gp'); }); it('tuplets', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/tuplets.gp5'); + await VisualTestHelper.runVisualTest('effects-and-annotations/tuplets.gp'); }); it('tuplets-advanced', async () => { @@ -78,10 +78,10 @@ describe('EffectsAndAnnotationsTests', () => { }); it('fingering', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/fingering.gpx'); + await VisualTestHelper.runVisualTest('effects-and-annotations/fingering.gp'); }); it('triplet-feel', async () => { - await VisualTestHelper.runVisualTest('effects-and-annotations/triplet-feel.gpx'); + await VisualTestHelper.runVisualTest('effects-and-annotations/triplet-feel.gp'); }); }); diff --git a/test/visualTests/features/General.test.ts b/test/visualTests/features/General.test.ts index 3826240b3..372071912 100644 --- a/test/visualTests/features/General.test.ts +++ b/test/visualTests/features/General.test.ts @@ -4,22 +4,22 @@ import { VisualTestHelper } from '@test/visualTests/VisualTestHelper'; describe('GeneralTests', () => { it('song-details', async () => { - await VisualTestHelper.runVisualTest('general/song-details.gp5'); + await VisualTestHelper.runVisualTest('general/song-details.gp'); }); it('repeats', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score; - await VisualTestHelper.runVisualTest('general/repeats.gp5', settings); + await VisualTestHelper.runVisualTest('general/repeats.gp', settings); }); it('alternate-endings', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score; - await VisualTestHelper.runVisualTest('general/alternate-endings.gp5', settings); + await VisualTestHelper.runVisualTest('general/alternate-endings.gp', settings); }); it('tuning', async () => { - await VisualTestHelper.runVisualTest('general/tuning.gp5'); + await VisualTestHelper.runVisualTest('general/tuning.gp'); }); }); diff --git a/test/visualTests/features/GuitarTabs.test.ts b/test/visualTests/features/GuitarTabs.test.ts index 644a0b6d3..d098f360e 100644 --- a/test/visualTests/features/GuitarTabs.test.ts +++ b/test/visualTests/features/GuitarTabs.test.ts @@ -8,20 +8,20 @@ describe('GuitarTabsTests', () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Tab; settings.notation.rhythmMode = TabRhythmMode.ShowWithBars; - await VisualTestHelper.runVisualTest('guitar-tabs/rhythm.gp5', settings); + await VisualTestHelper.runVisualTest('guitar-tabs/rhythm.gp', settings); }); it('rhythm-with-beams', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Tab; settings.notation.rhythmMode = TabRhythmMode.ShowWithBeams; - await VisualTestHelper.runVisualTest('guitar-tabs/rhythm-with-beams.gp5', settings); + await VisualTestHelper.runVisualTest('guitar-tabs/rhythm-with-beams.gp', settings); }); it('string-variations', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Tab; - await VisualTestHelper.runVisualTest('guitar-tabs/string-variations.gp5', settings); + await VisualTestHelper.runVisualTest('guitar-tabs/string-variations.gp', settings); }); }); diff --git a/test/visualTests/features/Layout.test.ts b/test/visualTests/features/Layout.test.ts index 307bfc3ca..04dc42b72 100644 --- a/test/visualTests/features/Layout.test.ts +++ b/test/visualTests/features/Layout.test.ts @@ -4,22 +4,22 @@ import { VisualTestHelper } from '@test/visualTests/VisualTestHelper'; describe('LayoutTests', () => { it('pageLayout', async () => { - await VisualTestHelper.runVisualTest('layout/page-layout.gp5'); + await VisualTestHelper.runVisualTest('layout/page-layout.gp'); }); it('multi-track', async () => { - await VisualTestHelper.runVisualTest('layout/multi-track.gp5', undefined, [0, 3]); + await VisualTestHelper.runVisualTest('layout/multi-track.gp', undefined, [0, 3]); }); it('multi-voice', async () => { - await VisualTestHelper.runVisualTest('layout/multi-voice.gp5'); + await VisualTestHelper.runVisualTest('layout/multi-voice.gp'); }); it('page-layout-5barsperrow', async () => { let settings: Settings = new Settings(); settings.display.layoutMode = LayoutMode.Page; settings.display.barsPerRow = 5; - await VisualTestHelper.runVisualTest('layout/page-layout-5barsperrow.gp5', settings); + await VisualTestHelper.runVisualTest('layout/page-layout-5barsperrow.gp', settings); }); it('page-layout-bar5to8', async () => { @@ -27,13 +27,13 @@ describe('LayoutTests', () => { settings.display.layoutMode = LayoutMode.Page; settings.display.startBar = 5; settings.display.barCount = 4; - await VisualTestHelper.runVisualTest('layout/page-layout-5to8.gp5', settings); + await VisualTestHelper.runVisualTest('layout/page-layout-5to8.gp', settings); }); it('horizontal-layout', async () => { let settings: Settings = new Settings(); settings.display.layoutMode = LayoutMode.Horizontal; - await VisualTestHelper.runVisualTest('layout/horizontal-layout.gp5', settings); + await VisualTestHelper.runVisualTest('layout/horizontal-layout.gp', settings); }); it('horizontal-layout-bar5to8', async () => { @@ -41,6 +41,6 @@ describe('LayoutTests', () => { settings.display.layoutMode = LayoutMode.Horizontal; settings.display.startBar = 5; settings.display.barCount = 4; - await VisualTestHelper.runVisualTest('layout/horizontal-layout-5to8.gp5', settings); + await VisualTestHelper.runVisualTest('layout/horizontal-layout-5to8.gp', settings); }); }); diff --git a/test/visualTests/features/MusicNotation.test.ts b/test/visualTests/features/MusicNotation.test.ts index 02a02ce12..21feebd59 100644 --- a/test/visualTests/features/MusicNotation.test.ts +++ b/test/visualTests/features/MusicNotation.test.ts @@ -16,7 +16,7 @@ describe('MusicNotationTests', () => { settings.notation.elements.set(NotationElement.ScoreTitle, false); settings.notation.elements.set(NotationElement.ScoreWords, false); settings.notation.elements.set(NotationElement.ScoreWordsAndMusic, false); - await VisualTestHelper.runVisualTest('music-notation/clefs.gpx', settings); + await VisualTestHelper.runVisualTest('music-notation/clefs.gp', settings); }); it('key-signatures', async () => { @@ -28,19 +28,19 @@ describe('MusicNotationTests', () => { it('time-signatures', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score; - await VisualTestHelper.runVisualTest('music-notation/time-signatures.gp5', settings); + await VisualTestHelper.runVisualTest('music-notation/time-signatures.gp', settings); }); it('notes-rests-beams', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score; - await VisualTestHelper.runVisualTest('music-notation/notes-rests-beams.gp5', settings); + await VisualTestHelper.runVisualTest('music-notation/notes-rests-beams.gp', settings); }); it('accidentals', async () => { let settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score; - await VisualTestHelper.runVisualTest('music-notation/accidentals.gp5', settings); + await VisualTestHelper.runVisualTest('music-notation/accidentals.gp', settings); }); it('forced-accidentals', async () => { diff --git a/test/visualTests/features/SpecialNotes.test.ts b/test/visualTests/features/SpecialNotes.test.ts index 4bbb1d5a3..8b6d836d0 100644 --- a/test/visualTests/features/SpecialNotes.test.ts +++ b/test/visualTests/features/SpecialNotes.test.ts @@ -2,11 +2,11 @@ import { VisualTestHelper } from '@test/visualTests/VisualTestHelper'; describe('SpecialNotesTests', () => { it('tied-notes', async () => { - await VisualTestHelper.runVisualTest('special-notes/tied-notes.gp5'); + await VisualTestHelper.runVisualTest('special-notes/tied-notes.gp'); }); it('grace-notes', async () => { - await VisualTestHelper.runVisualTest('special-notes/grace-notes.gp5'); + await VisualTestHelper.runVisualTest('special-notes/grace-notes.gp'); }); it('grace-notes-advanced', async () => { @@ -14,10 +14,10 @@ describe('SpecialNotesTests', () => { }); it('dead-notes', async () => { - await VisualTestHelper.runVisualTest('special-notes/dead-notes.gp5'); + await VisualTestHelper.runVisualTest('special-notes/dead-notes.gp'); }); it('ghost-notes', async () => { - await VisualTestHelper.runVisualTest('special-notes/ghost-notes.gp5'); + await VisualTestHelper.runVisualTest('special-notes/ghost-notes.gp'); }); }); diff --git a/test/visualTests/features/SpecialTracks.test.ts b/test/visualTests/features/SpecialTracks.test.ts index a3ea0659e..555d040ad 100644 --- a/test/visualTests/features/SpecialTracks.test.ts +++ b/test/visualTests/features/SpecialTracks.test.ts @@ -10,6 +10,6 @@ describe('SpecialTracksTests', () => { }); it('grand-staff', async () => { - await VisualTestHelper.runVisualTest('special-tracks/grand-staff.gpx'); + await VisualTestHelper.runVisualTest('special-tracks/grand-staff.gp'); }); }); From 440a34cd785b5c0cc6a4a187bc02397677f41385 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 23:15:15 +0100 Subject: [PATCH 13/31] Extensions on articulations for better exports --- src/exporter/GpifWriter.ts | 398 +++++++++++++++++----------- src/importer/GpifParser.ts | 13 +- src/model/InstrumentArticulation.ts | 11 +- src/model/PercussionMapper.ts | 195 +++++++------- test/exporter/Gp7Exporter.test.ts | 42 +-- 5 files changed, 380 insertions(+), 279 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 8476ee90a..6c952eaf3 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -16,6 +16,7 @@ import { HarmonicType } from '@src/model/HarmonicType'; import { KeySignatureType } from '@src/model/KeySignatureType'; import { Lyrics } from '@src/model/Lyrics'; import { MasterBar } from '@src/model/MasterBar'; +import { MusicFontSymbol } from '@src/model/MusicFontSymbol'; import { Note } from '@src/model/Note'; import { NoteAccidentalMode } from '@src/model/NoteAccidentalMode'; import { Ottavia } from '@src/model/Ottavia'; @@ -31,6 +32,7 @@ import { TripletFeel } from '@src/model/TripletFeel'; import { Tuning } from '@src/model/Tuning'; import { VibratoType } from '@src/model/VibratoType'; import { Voice } from '@src/model/Voice'; +import { TextBaseline } from '@src/platform/ICanvas'; import { BeamDirection } from '@src/rendering/utils/BeamDirection'; import { XmlDocument } from '@src/xml/XmlDocument'; import { XmlNode } from '@src/xml/XmlNode'; @@ -64,142 +66,162 @@ enum GpifIconIds { Membraphone = 20 } +class GpifMidiProgramInfo { + public icon: GpifIconIds = GpifIconIds.Piano; + public instrumentSetName: string; + public instrumentSetType: string; + + public constructor(icon: GpifIconIds, instrumentSetName: string, instrumentSetType: string | null = null) { + this.icon = icon; + this.instrumentSetName = instrumentSetName; + if (!instrumentSetType) { + const parts = instrumentSetName.split(' '); + parts[0] = parts[0].substr(0, 1).toLowerCase() + parts[0].substr(1); + this.instrumentSetType = parts.join(''); + } else { + this.instrumentSetType = instrumentSetType; + } + } +} + /** * This class can write a score.gpif XML from a given score model. */ export class GpifWriter { private _rhythmIdLookup: Map = new Map(); - private static IconLookup: Map = new Map([ - [0, GpifIconIds.Piano], - [1, GpifIconIds.Piano], - [2, GpifIconIds.Piano], - [3, GpifIconIds.Piano], - [4, GpifIconIds.Piano], - [5, GpifIconIds.Piano], - [6, GpifIconIds.Piano], - [7, GpifIconIds.Piano], - [8, GpifIconIds.PitchedIdiophone], - [9, GpifIconIds.PitchedIdiophone], - [10, GpifIconIds.PitchedIdiophone], - [11, GpifIconIds.PitchedIdiophone], - [12, GpifIconIds.PitchedIdiophone], - [13, GpifIconIds.PitchedIdiophone], - [14, GpifIconIds.PitchedIdiophone], - [15, GpifIconIds.Banjo], - [16, GpifIconIds.Piano], - [17, GpifIconIds.Piano], - [18, GpifIconIds.Piano], - [19, GpifIconIds.Piano], - [20, GpifIconIds.Piano], - [21, GpifIconIds.Piano], - [22, GpifIconIds.Woodwind], - [23, GpifIconIds.Piano], - [24, GpifIconIds.ClassicalGuitar], - [25, GpifIconIds.SteelGuitar], - [26, GpifIconIds.SteelGuitar], - [27, GpifIconIds.ElectricGuitar], - [28, GpifIconIds.ElectricGuitar], - [29, GpifIconIds.ElectricGuitar], - [30, GpifIconIds.SteelGuitar], - [31, GpifIconIds.SteelGuitar], - [32, GpifIconIds.Bass], - [33, GpifIconIds.Bass], - [34, GpifIconIds.Bass], - [35, GpifIconIds.Bass], - [36, GpifIconIds.Bass], - [37, GpifIconIds.Bass], - [38, GpifIconIds.Synth], - [39, GpifIconIds.Synth], - [40, GpifIconIds.Strings], - [41, GpifIconIds.Strings], - [42, GpifIconIds.Strings], - [43, GpifIconIds.Strings], - [44, GpifIconIds.Strings], - [45, GpifIconIds.Strings], - [46, GpifIconIds.Piano], - [47, GpifIconIds.Membraphone], - [48, GpifIconIds.Strings], - [49, GpifIconIds.Strings], - [50, GpifIconIds.Strings], - [51, GpifIconIds.Strings], - [52, GpifIconIds.Vocal], - [53, GpifIconIds.Vocal], - [54, GpifIconIds.Vocal], - [55, GpifIconIds.Synth], - [56, GpifIconIds.Brass], - [57, GpifIconIds.Brass], - [58, GpifIconIds.Brass], - [59, GpifIconIds.Brass], - [60, GpifIconIds.Brass], - [61, GpifIconIds.Brass], - [62, GpifIconIds.Brass], - [63, GpifIconIds.Brass], - [64, GpifIconIds.Reed], - [65, GpifIconIds.Reed], - [66, GpifIconIds.Reed], - [67, GpifIconIds.Reed], - [68, GpifIconIds.Reed], - [69, GpifIconIds.Reed], - [70, GpifIconIds.Reed], - [71, GpifIconIds.Reed], - [72, GpifIconIds.Reed], - [73, GpifIconIds.Woodwind], - [74, GpifIconIds.Woodwind], - [75, GpifIconIds.Woodwind], - [76, GpifIconIds.Woodwind], - [77, GpifIconIds.Woodwind], - [78, GpifIconIds.Woodwind], - [79, GpifIconIds.Woodwind], - [80, GpifIconIds.Synth], - [81, GpifIconIds.Synth], - [82, GpifIconIds.Synth], - [83, GpifIconIds.Synth], - [84, GpifIconIds.Synth], - [85, GpifIconIds.Synth], - [86, GpifIconIds.Synth], - [87, GpifIconIds.Synth], - [88, GpifIconIds.Synth], - [89, GpifIconIds.Synth], - [90, GpifIconIds.Synth], - [91, GpifIconIds.Synth], - [92, GpifIconIds.Synth], - [93, GpifIconIds.Synth], - [94, GpifIconIds.Synth], - [95, GpifIconIds.Synth], - [96, GpifIconIds.Fx], - [97, GpifIconIds.Fx], - [98, GpifIconIds.Fx], - [99, GpifIconIds.Fx], - [100, GpifIconIds.Fx], - [101, GpifIconIds.Fx], - [102, GpifIconIds.Fx], - [103, GpifIconIds.Fx], - [104, GpifIconIds.ElectricGuitar], - [105, GpifIconIds.Banjo], - [106, GpifIconIds.Ukulele], - [107, GpifIconIds.Banjo], - [108, GpifIconIds.PitchedIdiophone], - [109, GpifIconIds.Reed], - [110, GpifIconIds.Strings], - [111, GpifIconIds.Woodwind], - [112, GpifIconIds.PitchedIdiophone], - [113, GpifIconIds.Idiophone], - [114, GpifIconIds.PitchedIdiophone], - [115, GpifIconIds.Idiophone], - [116, GpifIconIds.Membraphone], - [117, GpifIconIds.Membraphone], - [118, GpifIconIds.Membraphone], - [119, GpifIconIds.Idiophone], - [120, GpifIconIds.Fx], - [121, GpifIconIds.Fx], - [122, GpifIconIds.Fx], - [123, GpifIconIds.Fx], - [124, GpifIconIds.Fx], - [125, GpifIconIds.Fx], - [126, GpifIconIds.Fx], - [127, GpifIconIds.Fx] + private static MidiProgramInfoLookup: Map = new Map([ + [0, new GpifMidiProgramInfo(GpifIconIds.Piano, "Acoustic Piano")], + [1, new GpifMidiProgramInfo(GpifIconIds.Piano, "Acoustic Piano")], + [2, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Piano")], + [3, new GpifMidiProgramInfo(GpifIconIds.Piano, "Acoustic Piano")], + [4, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Piano")], + [5, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Piano")], + [6, new GpifMidiProgramInfo(GpifIconIds.Piano, "Harpsichord")], + [7, new GpifMidiProgramInfo(GpifIconIds.Piano, "Harpsichord")], + [8, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Celesta")], + [9, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Vibraphone")], + [10, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Vibraphone")], + [11, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Vibraphone")], + [12, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Xylophone")], + [13, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Xylophone")], + [14, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Vibraphone")], + [15, new GpifMidiProgramInfo(GpifIconIds.Banjo, "Banjo")], + [16, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [17, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [18, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [19, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [20, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [21, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [22, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Recorder")], + [23, new GpifMidiProgramInfo(GpifIconIds.Piano, "Electric Organ")], + [24, new GpifMidiProgramInfo(GpifIconIds.ClassicalGuitar, "Nylon Guitar")], + [25, new GpifMidiProgramInfo(GpifIconIds.SteelGuitar, "Steel Guitar")], + [26, new GpifMidiProgramInfo(GpifIconIds.SteelGuitar, "Electric Guitar")], + [27, new GpifMidiProgramInfo(GpifIconIds.ElectricGuitar, "Electric Guitar")], + [28, new GpifMidiProgramInfo(GpifIconIds.ElectricGuitar, "Electric Guitar")], + [29, new GpifMidiProgramInfo(GpifIconIds.ElectricGuitar, "Electric Guitar")], + [30, new GpifMidiProgramInfo(GpifIconIds.SteelGuitar, "Electric Guitar")], + [31, new GpifMidiProgramInfo(GpifIconIds.SteelGuitar, "Electric Guitar")], + [32, new GpifMidiProgramInfo(GpifIconIds.Bass, "Acoustic Bass")], + [33, new GpifMidiProgramInfo(GpifIconIds.Bass, "Electric Bass")], + [34, new GpifMidiProgramInfo(GpifIconIds.Bass, "Electric Bass")], + [35, new GpifMidiProgramInfo(GpifIconIds.Bass, "Acoustic Bass")], + [36, new GpifMidiProgramInfo(GpifIconIds.Bass, "Electric Bass")], + [37, new GpifMidiProgramInfo(GpifIconIds.Bass, "Electric Bass")], + [38, new GpifMidiProgramInfo(GpifIconIds.Synth, "Synth Bass")], + [39, new GpifMidiProgramInfo(GpifIconIds.Synth, "Synth Bass")], + [40, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [41, new GpifMidiProgramInfo(GpifIconIds.Strings, "Viola")], + [42, new GpifMidiProgramInfo(GpifIconIds.Strings, "Cello")], + [43, new GpifMidiProgramInfo(GpifIconIds.Strings, "Contrabass")], + [44, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [45, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [46, new GpifMidiProgramInfo(GpifIconIds.Piano, "Harp")], + [47, new GpifMidiProgramInfo(GpifIconIds.Membraphone, "Timpani")], + [48, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [49, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [50, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [51, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [52, new GpifMidiProgramInfo(GpifIconIds.Vocal, "Voice")], + [53, new GpifMidiProgramInfo(GpifIconIds.Vocal, "Voice")], + [54, new GpifMidiProgramInfo(GpifIconIds.Vocal, "Voice")], + [55, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [56, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trumpet")], + [57, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trombone")], + [58, new GpifMidiProgramInfo(GpifIconIds.Brass, "Tuba")], + [59, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trumpet")], + [60, new GpifMidiProgramInfo(GpifIconIds.Brass, "French Horn")], + [61, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trumpet")], + [62, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trumpet")], + [63, new GpifMidiProgramInfo(GpifIconIds.Brass, "Trumpet")], + [64, new GpifMidiProgramInfo(GpifIconIds.Reed, "Saxophone")], + [65, new GpifMidiProgramInfo(GpifIconIds.Reed, "Saxophone")], + [66, new GpifMidiProgramInfo(GpifIconIds.Reed, "Saxophone")], + [67, new GpifMidiProgramInfo(GpifIconIds.Reed, "Saxophone")], + [68, new GpifMidiProgramInfo(GpifIconIds.Reed, "Oboe")], + [69, new GpifMidiProgramInfo(GpifIconIds.Reed, "English Horn")], + [70, new GpifMidiProgramInfo(GpifIconIds.Reed, "Bassoon")], + [71, new GpifMidiProgramInfo(GpifIconIds.Reed, "Clarinet")], + [72, new GpifMidiProgramInfo(GpifIconIds.Reed, "Piccolo")], + [73, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Flute")], + [74, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Recorder")], + [75, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Flute")], + [76, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Recorder")], + [77, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Flute")], + [78, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Recorder")], + [79, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Flute")], + [80, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [81, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [82, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [83, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [84, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [85, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [86, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [87, new GpifMidiProgramInfo(GpifIconIds.Synth, "Lead Synthesizer")], + [88, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [89, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [90, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [91, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [92, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [93, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [94, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [95, new GpifMidiProgramInfo(GpifIconIds.Synth, "Pad Synthesizer")], + [96, new GpifMidiProgramInfo(GpifIconIds.Fx, "Pad Synthesizer")], + [97, new GpifMidiProgramInfo(GpifIconIds.Fx, "Pad Synthesizer")], + [98, new GpifMidiProgramInfo(GpifIconIds.Fx, "Pad Synthesizer")], + [99, new GpifMidiProgramInfo(GpifIconIds.Fx, "Pad Synthesizer")], + [100, new GpifMidiProgramInfo(GpifIconIds.Fx, "Lead Synthesizer")], + [101, new GpifMidiProgramInfo(GpifIconIds.Fx, "Lead Synthesizer")], + [102, new GpifMidiProgramInfo(GpifIconIds.Fx, "Lead Synthesizer")], + [103, new GpifMidiProgramInfo(GpifIconIds.Fx, "Trumpet")], + [104, new GpifMidiProgramInfo(GpifIconIds.ElectricGuitar, "Banjo")], + [105, new GpifMidiProgramInfo(GpifIconIds.Banjo, "Banjo")], + [106, new GpifMidiProgramInfo(GpifIconIds.Ukulele, "Ukulele")], + [107, new GpifMidiProgramInfo(GpifIconIds.Banjo, "Banjo")], + [108, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Xylophone")], + [109, new GpifMidiProgramInfo(GpifIconIds.Reed, "Bassoon")], + [110, new GpifMidiProgramInfo(GpifIconIds.Strings, "Violin")], + [111, new GpifMidiProgramInfo(GpifIconIds.Woodwind, "Flute")], + [112, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Xylophone")], + [113, new GpifMidiProgramInfo(GpifIconIds.Idiophone, "Celesta")], + [114, new GpifMidiProgramInfo(GpifIconIds.PitchedIdiophone, "Vibraphone")], + [115, new GpifMidiProgramInfo(GpifIconIds.Idiophone, "Xylophone")], + [116, new GpifMidiProgramInfo(GpifIconIds.Membraphone, "Xylophone")], + [117, new GpifMidiProgramInfo(GpifIconIds.Membraphone, "Xylophone")], + [118, new GpifMidiProgramInfo(GpifIconIds.Membraphone, "Xylophone")], + [119, new GpifMidiProgramInfo(GpifIconIds.Idiophone, "Celesta")], + [120, new GpifMidiProgramInfo(GpifIconIds.Fx, "Steel Guitar")], + [121, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [122, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [123, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [124, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [125, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [126, new GpifMidiProgramInfo(GpifIconIds.Fx, "Recorder")], + [127, new GpifMidiProgramInfo(GpifIconIds.Fx, "Timpani")] ]) + private static DrumKitProgramInfo: GpifMidiProgramInfo = new GpifMidiProgramInfo(GpifIconIds.PercussionKit, "Drums", "drumKit"); + public writeXml(score: Score): string { const xmlDocument = new XmlDocument(); @@ -981,10 +1003,10 @@ export class GpifWriter { private static getIconId(playbackInfo: PlaybackInformation): GpifIconIds { if (playbackInfo.primaryChannel === 9) { - return GpifIconIds.PercussionKit; + return GpifWriter.DrumKitProgramInfo.icon; } - if (GpifWriter.IconLookup.has(playbackInfo.program)) { - return GpifWriter.IconLookup.get(playbackInfo.program)!; + if (GpifWriter.MidiProgramInfoLookup.has(playbackInfo.program)) { + return GpifWriter.MidiProgramInfoLookup.get(playbackInfo.program)!.icon; } return GpifIconIds.SteelGuitar; } @@ -1222,31 +1244,99 @@ export class GpifWriter { private writeInstrumentSetNode(trackNode: XmlNode, track: Track) { const instrumentSet = trackNode.addElement('InstrumentSet'); - // TODO: create mapping of midi instruments to type - instrumentSet.addElement('Name').innerText = 'Steel Guitar'; - instrumentSet.addElement('Type').innerText = 'steelGuitar'; instrumentSet.addElement('LineCount').innerText = track.staves[0].standardNotationLineCount.toString(); - // TODO: percussionArticulations - const elements = instrumentSet.addElement('Elements'); - const element = elements.addElement('Element'); - - element.addElement('Pitched').innerText = 'Pitched'; - element.addElement('Type').innerText = 'pitched'; - element.addElement('SoundbankName').innerText = ''; - - const articulations = element.addElement('Articulations'); - const articulation = articulations.addElement('Articulation'); - - articulation.addElement('Name').innerText = ''; - articulation.addElement('StaffLine').innerText = '0'; - articulation.addElement('Noteheads').innerText = 'noteheadBlack noteheadHalf noteheadWhole'; - articulation.addElement('TechniquePlacement').innerText = 'outside'; - articulation.addElement('TechniqueSymbol').innerText = ''; - articulation.addElement('InputMidiNumbers').innerText = ''; - articulation.addElement('OutputRSESound').innerText = ''; - articulation.addElement('OutputMidiNumber').innerText = '0'; + + if (track.percussionArticulations.length) { + instrumentSet.addElement('Name').innerText = GpifWriter.DrumKitProgramInfo.instrumentSetName; + instrumentSet.addElement('Type').innerText = GpifWriter.DrumKitProgramInfo.instrumentSetType; + let currentElementType: string = ""; + let currentElementName: string = ""; + let currentArticulations!: XmlNode; + let counterPerType = new Map(); + const elements = instrumentSet.addElement('Elements'); + for (const articulation of track.percussionArticulations) { + if (!currentElementType || currentElementType !== articulation.elementType) { + var currentElement = elements.addElement('Element'); + + let name = articulation.elementType; + if (counterPerType.has(name)) { + const counter = counterPerType.get(name)!; + name += ' ' + counter; + counterPerType.set(name, counter + 1); + } else { + counterPerType.set(name, 1); + } + + currentElementName = name; + currentElement.addElement('Name').innerText = name; + currentElement.addElement('Type').innerText = articulation.elementType; + + currentArticulations = currentElement.addElement('Articulations'); + } + + + const articulationNode = currentArticulations.addElement('Articulation'); + articulationNode.addElement('Name').innerText = currentElementName + ' ' + currentArticulations.childNodes.length; + articulationNode.addElement('StaffLine').innerText = articulation.staffLine.toString(); + articulationNode.addElement('NoteHeads').innerText = [ + this.mapMusicSymbol(articulation.noteHeadDefault), + this.mapMusicSymbol(articulation.noteHeadHalf), + this.mapMusicSymbol(articulation.noteHeadWhole) + ].join(' '); + + switch (articulation.techniqueSymbolPlacement) { + case TextBaseline.Top: + articulationNode.addElement('TechniquePlacement').innerText = "below"; + break; + case TextBaseline.Middle: + articulationNode.addElement('TechniquePlacement').innerText = "inside"; + break; + case TextBaseline.Bottom: + articulationNode.addElement('TechniquePlacement').innerText = "above"; + break; + } + articulationNode.addElement('TechniqueSymbol').innerText = this.mapMusicSymbol(articulation.techniqueSymbol); + articulationNode.addElement('InputMidiNumbers').innerText = ''; + articulationNode.addElement('OutputMidiNumber').innerText = articulation.outputMidiNumber.toString(); + } + } else { + const programInfo = GpifWriter.MidiProgramInfoLookup.has(track.playbackInfo.program) + ? GpifWriter.MidiProgramInfoLookup.get(track.playbackInfo.program)! + : GpifWriter.MidiProgramInfoLookup.get(0)!; + + instrumentSet.addElement('Name').innerText = programInfo.instrumentSetName; + instrumentSet.addElement('Type').innerText = programInfo.instrumentSetType; + + // Only the simple pitched element for normal instruments + const elements = instrumentSet.addElement('Elements'); + const element = elements.addElement('Element'); + + element.addElement('Pitched').innerText = 'Pitched'; + element.addElement('Type').innerText = 'pitched'; + element.addElement('SoundbankName').innerText = ''; + + const articulations = element.addElement('Articulations'); + const articulation = articulations.addElement('Articulation'); + + articulation.addElement('Name').innerText = ''; + articulation.addElement('StaffLine').innerText = '0'; + articulation.addElement('Noteheads').innerText = 'noteheadBlack noteheadHalf noteheadWhole'; + articulation.addElement('TechniquePlacement').innerText = 'outside'; + articulation.addElement('TechniqueSymbol').innerText = ''; + articulation.addElement('InputMidiNumbers').innerText = ''; + articulation.addElement('OutputRSESound').innerText = ''; + articulation.addElement('OutputMidiNumber').innerText = '0'; + } + } + + private mapMusicSymbol(symbol: MusicFontSymbol): string { + if (symbol === MusicFontSymbol.None) { + return ''; + } + let s = MusicFontSymbol[symbol]; + return s.substring(0, 1).toLowerCase() + s.substring(1); } private writeMasterBarsNode(parent: XmlNode, score: Score) { diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index a757408d3..bf569a4c8 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -488,31 +488,34 @@ export class GpifParser { } private parseElement(track: Track, node: XmlNode) { + const type = node.findChildElement('Type')!.innerText; for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { + case 'Name': case 'Articulations': - this.parseArticulations(track, c); + this.parseArticulations(track, c, type); break; } } } } - private parseArticulations(track: Track, node: XmlNode) { + private parseArticulations(track: Track, node: XmlNode, elementType: string) { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Articulation': - this.parseArticulation(track, c); + this.parseArticulation(track, c, elementType); break; } } } } - private parseArticulation(track: Track, node: XmlNode) { + private parseArticulation(track: Track, node: XmlNode, elementType:string) { const articulation = new InstrumentArticulation(); articulation.outputMidiNumber = -1; + articulation.elementType = elementType; let name = ''; for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { @@ -2161,7 +2164,7 @@ export class GpifParser { break; } } - if(!hasPercussion) { + if (!hasPercussion) { track.percussionArticulations = []; } } diff --git a/src/model/InstrumentArticulation.ts b/src/model/InstrumentArticulation.ts index fd50fbbfe..385e35763 100644 --- a/src/model/InstrumentArticulation.ts +++ b/src/model/InstrumentArticulation.ts @@ -7,6 +7,10 @@ import { MusicFontSymbol } from "./MusicFontSymbol"; * @json */ export class InstrumentArticulation { + /** + * Gets or sets the type of the element for which this articulation is for. + */ + public elementType: string; /** * Gets or sets the line the note head should be shown for standard notation */ @@ -36,13 +40,16 @@ export class InstrumentArticulation { */ public outputMidiNumber: number; - public constructor(staffLine: number = 0, + public constructor( + elementType: string = "", + staffLine: number = 0, outputMidiNumber: number = 0, noteHeadDefault: MusicFontSymbol = MusicFontSymbol.None, noteHeadHalf: MusicFontSymbol = MusicFontSymbol.None, noteHeadWhole: MusicFontSymbol = MusicFontSymbol.None, techniqueSymbol: MusicFontSymbol = MusicFontSymbol.None, techniqueSymbolPlacement: TextBaseline = TextBaseline.Middle) { + this.elementType = elementType; this.outputMidiNumber = outputMidiNumber; this.staffLine = staffLine; this.noteHeadDefault = noteHeadDefault; @@ -62,4 +69,4 @@ export class InstrumentArticulation { return this.noteHeadDefault; } } -} \ No newline at end of file +} diff --git a/src/model/PercussionMapper.ts b/src/model/PercussionMapper.ts index a8d135cd5..1ee7c5763 100644 --- a/src/model/PercussionMapper.ts +++ b/src/model/PercussionMapper.ts @@ -55,17 +55,18 @@ export class PercussionMapper { * let midi = articulation.getElementsByTagName('InputMidiNumbers'); * if(midi.length === 1) { * midi = midi[0].textContent; - * const outputMidiNumber = articulation.getElementsByTagName('OutputMidiNumber')[0].textContent + * const elementType = articulation.parentElement.parentElement.getElementsByTagName('Type')[0].textContent; + * const outputMidiNumber = articulation.getElementsByTagName('OutputMidiNumber')[0].textContent; * const staffLine = articulation.getElementsByTagName('StaffLine')[0].textContent; * const techniqueSymbol = articulation.getElementsByTagName('TechniqueSymbol')[0].textContent; * const techniquePlacement = articulation.getElementsByTagName('TechniquePlacement')[0].textContent; * const noteHeads = articulation.getElementsByTagName('Noteheads')[0].textContent.split(' ').map(n=>n = 'MusicFontSymbol.' + n); * if(!existingArticulations.has(midi)) { * if(techniqueSymbol) { - * s += `[${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]}, ${techniqueSymbol}, ${techniquePlacement})],\r\n`; + * s += `['${elementType}', ${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]}, ${techniqueSymbol}, ${techniquePlacement})],\r\n`; * } * else { - * s += `[${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]})],\r\n`; + * s += `['${elementType}', ${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]})],\r\n`; * } * existingArticulations.set(midi, true); * } @@ -74,100 +75,100 @@ export class PercussionMapper { * copy(s) */ private static instrumentArticulations: Map = new Map([ - [38, new InstrumentArticulation(3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [37, new InstrumentArticulation(3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [91, new InstrumentArticulation(3, 38, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], - [42, new InstrumentArticulation(-1, 42, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [92, new InstrumentArticulation(-1, 46, MusicFontSymbol.NoteheadCircleSlash, MusicFontSymbol.NoteheadCircleSlash, MusicFontSymbol.NoteheadCircleSlash)], - [46, new InstrumentArticulation(-1, 46, MusicFontSymbol.NoteheadCircleX, MusicFontSymbol.NoteheadCircleX, MusicFontSymbol.NoteheadCircleX)], - [44, new InstrumentArticulation(9, 44, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [35, new InstrumentArticulation(8, 35, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [36, new InstrumentArticulation(7, 36, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [50, new InstrumentArticulation(1, 50, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [48, new InstrumentArticulation(2, 48, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [47, new InstrumentArticulation(4, 47, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [45, new InstrumentArticulation(5, 45, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [43, new InstrumentArticulation(6, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [93, new InstrumentArticulation(0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, TextBaseline.Bottom)], - [51, new InstrumentArticulation(0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [53, new InstrumentArticulation(0, 53, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], - [94, new InstrumentArticulation(0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Top)], - [55, new InstrumentArticulation(-2, 55, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [95, new InstrumentArticulation(-2, 55, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], - [52, new InstrumentArticulation(-3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat)], - [96, new InstrumentArticulation(-3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat)], - [49, new InstrumentArticulation(-2, 49, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX)], - [97, new InstrumentArticulation(-2, 49, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], - [57, new InstrumentArticulation(-1, 57, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX)], - [98, new InstrumentArticulation(-1, 57, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], - [99, new InstrumentArticulation(1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], - [100, new InstrumentArticulation(1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], - [56, new InstrumentArticulation(0, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], - [101, new InstrumentArticulation(0, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], - [102, new InstrumentArticulation(-1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], - [103, new InstrumentArticulation(-1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], - [77, new InstrumentArticulation(-9, 77, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], - [76, new InstrumentArticulation(-10, 76, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], - [60, new InstrumentArticulation(-4, 60, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [104, new InstrumentArticulation(-5, 60, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [105, new InstrumentArticulation(-6, 60, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [61, new InstrumentArticulation(-7, 61, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [106, new InstrumentArticulation(-8, 61, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [107, new InstrumentArticulation(-16, 61, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [66, new InstrumentArticulation(10, 66, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [65, new InstrumentArticulation(9, 65, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [68, new InstrumentArticulation(12, 68, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [67, new InstrumentArticulation(11, 67, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [64, new InstrumentArticulation(17, 64, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [108, new InstrumentArticulation(16, 64, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [109, new InstrumentArticulation(15, 64, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [63, new InstrumentArticulation(14, 63, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [110, new InstrumentArticulation(13, 63, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [62, new InstrumentArticulation(19, 62, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [72, new InstrumentArticulation(-11, 72, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [71, new InstrumentArticulation(-17, 71, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [73, new InstrumentArticulation(38, 73, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [74, new InstrumentArticulation(37, 74, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [86, new InstrumentArticulation(36, 86, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [87, new InstrumentArticulation(35, 87, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [54, new InstrumentArticulation(3, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], - [111, new InstrumentArticulation(2, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [112, new InstrumentArticulation(1, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsDownBow, TextBaseline.Bottom)], - [113, new InstrumentArticulation(-7, 54, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [79, new InstrumentArticulation(30, 79, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [78, new InstrumentArticulation(29, 78, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [58, new InstrumentArticulation(28, 58, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [81, new InstrumentArticulation(27, 81, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [80, new InstrumentArticulation(26, 80, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], - [114, new InstrumentArticulation(25, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [115, new InstrumentArticulation(18, 49, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [116, new InstrumentArticulation(24, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [69, new InstrumentArticulation(23, 69, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [117, new InstrumentArticulation(22, 69, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [85, new InstrumentArticulation(21, 85, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [75, new InstrumentArticulation(20, 75, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [70, new InstrumentArticulation(-12, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [118, new InstrumentArticulation(-13, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [119, new InstrumentArticulation(-14, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [120, new InstrumentArticulation(-15, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [82, new InstrumentArticulation(-23, 54, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [122, new InstrumentArticulation(-24, 54, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [84, new InstrumentArticulation(-18, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [123, new InstrumentArticulation(-19, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], - [83, new InstrumentArticulation(-20, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [124, new InstrumentArticulation(-21, 62, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TextBaseline.Top)], - [125, new InstrumentArticulation(-22, 62, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TextBaseline.Bottom)], - [39, new InstrumentArticulation(3, 39, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [40, new InstrumentArticulation(3, 40, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [31, new InstrumentArticulation(3, 40, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2)], - [41, new InstrumentArticulation(5, 41, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], - [59, new InstrumentArticulation(2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, TextBaseline.Bottom)], - [126, new InstrumentArticulation(2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [127, new InstrumentArticulation(2, 59, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], - [29, new InstrumentArticulation(2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Top)], - [30, new InstrumentArticulation(-3, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [33, new InstrumentArticulation(3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], - [34, new InstrumentArticulation(3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadBlack)] + [38, new InstrumentArticulation("snare", 3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [37, new InstrumentArticulation("snare", 3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [91, new InstrumentArticulation("snare", 3, 38, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], + [42, new InstrumentArticulation("hiHat", -1, 42, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [92, new InstrumentArticulation("hiHat", -1, 46, MusicFontSymbol.NoteheadCircleSlash, MusicFontSymbol.NoteheadCircleSlash, MusicFontSymbol.NoteheadCircleSlash)], + [46, new InstrumentArticulation("hiHat", -1, 46, MusicFontSymbol.NoteheadCircleX, MusicFontSymbol.NoteheadCircleX, MusicFontSymbol.NoteheadCircleX)], + [44, new InstrumentArticulation("hiHat", 9, 44, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [35, new InstrumentArticulation("kickDrum", 8, 35, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [36, new InstrumentArticulation("kickDrum", 7, 36, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [50, new InstrumentArticulation("tom", 1, 50, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [48, new InstrumentArticulation("tom", 2, 48, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [47, new InstrumentArticulation("tom", 4, 47, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [45, new InstrumentArticulation("tom", 5, 45, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [43, new InstrumentArticulation("tom", 6, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [93, new InstrumentArticulation("ride", 0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, TextBaseline.Bottom)], + [51, new InstrumentArticulation("ride", 0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [53, new InstrumentArticulation("ride", 0, 53, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], + [94, new InstrumentArticulation("ride", 0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Top)], + [55, new InstrumentArticulation("splash", -2, 55, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [95, new InstrumentArticulation("splash", -2, 55, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], + [52, new InstrumentArticulation("china", -3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat)], + [96, new InstrumentArticulation("china", -3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat)], + [49, new InstrumentArticulation("crash", -2, 49, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX)], + [97, new InstrumentArticulation("crash", -2, 49, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], + [57, new InstrumentArticulation("crash", -1, 57, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX)], + [98, new InstrumentArticulation("crash", -1, 57, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Bottom)], + [99, new InstrumentArticulation("cowbell", 1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], + [100, new InstrumentArticulation("cowbell", 1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], + [56, new InstrumentArticulation("cowbell", 0, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], + [101, new InstrumentArticulation("cowbell", 0, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], + [102, new InstrumentArticulation("cowbell", -1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, MusicFontSymbol.NoteheadTriangleUpWhole)], + [103, new InstrumentArticulation("cowbell", -1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, MusicFontSymbol.NoteheadXWhole)], + [77, new InstrumentArticulation("woodblock", -9, 77, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], + [76, new InstrumentArticulation("woodblock", -10, 76, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], + [60, new InstrumentArticulation("bongo", -4, 60, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [104, new InstrumentArticulation("bongo", -5, 60, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [105, new InstrumentArticulation("bongo", -6, 60, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [61, new InstrumentArticulation("bongo", -7, 61, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [106, new InstrumentArticulation("bongo", -8, 61, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [107, new InstrumentArticulation("bongo", -16, 61, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [66, new InstrumentArticulation("timbale", 10, 66, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [65, new InstrumentArticulation("timbale", 9, 65, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [68, new InstrumentArticulation("agogo", 12, 68, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [67, new InstrumentArticulation("agogo", 11, 67, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [64, new InstrumentArticulation("conga", 17, 64, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [108, new InstrumentArticulation("conga", 16, 64, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [109, new InstrumentArticulation("conga", 15, 64, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [63, new InstrumentArticulation("conga", 14, 63, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [110, new InstrumentArticulation("conga", 13, 63, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [62, new InstrumentArticulation("conga", 19, 62, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [72, new InstrumentArticulation("whistle", -11, 72, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [71, new InstrumentArticulation("whistle", -17, 71, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [73, new InstrumentArticulation("guiro", 38, 73, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [74, new InstrumentArticulation("guiro", 37, 74, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [86, new InstrumentArticulation("surdo", 36, 86, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [87, new InstrumentArticulation("surdo", 35, 87, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [54, new InstrumentArticulation("tambourine", 3, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack)], + [111, new InstrumentArticulation("tambourine", 2, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [112, new InstrumentArticulation("tambourine", 1, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsDownBow, TextBaseline.Bottom)], + [113, new InstrumentArticulation("tambourine", -7, 54, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [79, new InstrumentArticulation("cuica", 30, 79, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [78, new InstrumentArticulation("cuica", 29, 78, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [58, new InstrumentArticulation("vibraslap", 28, 58, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [81, new InstrumentArticulation("triangle", 27, 81, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [80, new InstrumentArticulation("triangle", 26, 80, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, TextBaseline.Middle)], + [114, new InstrumentArticulation("grancassa", 25, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [115, new InstrumentArticulation("piatti", 18, 49, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [116, new InstrumentArticulation("piatti", 24, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [69, new InstrumentArticulation("cabasa", 23, 69, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [117, new InstrumentArticulation("cabasa", 22, 69, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [85, new InstrumentArticulation("castanets", 21, 85, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [75, new InstrumentArticulation("claves", 20, 75, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [70, new InstrumentArticulation("maraca", -12, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [118, new InstrumentArticulation("maraca", -13, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [119, new InstrumentArticulation("maraca", -14, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [120, new InstrumentArticulation("maraca", -15, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [82, new InstrumentArticulation("shaker", -23, 54, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [122, new InstrumentArticulation("shaker", -24, 54, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [84, new InstrumentArticulation("bellTree", -18, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [123, new InstrumentArticulation("bellTree", -19, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TextBaseline.Bottom)], + [83, new InstrumentArticulation("jingleBell", -20, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [124, new InstrumentArticulation("unpitched", -21, 62, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TextBaseline.Top)], + [125, new InstrumentArticulation("unpitched", -22, 62, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TextBaseline.Bottom)], + [39, new InstrumentArticulation("handClap", 3, 39, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [40, new InstrumentArticulation("snare", 3, 40, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [31, new InstrumentArticulation("snare", 3, 40, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2)], + [41, new InstrumentArticulation("tom", 5, 41, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], + [59, new InstrumentArticulation("ride", 2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, TextBaseline.Bottom)], + [126, new InstrumentArticulation("ride", 2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [127, new InstrumentArticulation("ride", 2, 59, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], + [29, new InstrumentArticulation("ride", 2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TextBaseline.Top)], + [30, new InstrumentArticulation("crash", -3, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [33, new InstrumentArticulation("snare", 3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], + [34, new InstrumentArticulation("snare", 3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadBlack)] ]); diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index f3bacf04d..292a8e547 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -144,31 +144,31 @@ describe('Gp7ExporterTest', () => { await testRoundTripFolderEqual('visual-tests/effects-and-annotations'); }); - // it('visual-general', async () => { - // await testRoundTripFolderEqual('visual-tests/general'); - // }); + it('visual-general', async () => { + await testRoundTripFolderEqual('visual-tests/general'); + }); - // it('visual-guitar-tabs', async () => { - // await testRoundTripFolderEqual('visual-tests/guitar-tabs'); - // }); + it('visual-guitar-tabs', async () => { + await testRoundTripFolderEqual('visual-tests/guitar-tabs'); + }); - // it('visual-layout', async () => { - // await testRoundTripFolderEqual('visual-tests/layout'); - // }); + it('visual-layout', async () => { + await testRoundTripFolderEqual('visual-tests/layout'); + }); - // it('visual-music-notation', async () => { - // await testRoundTripFolderEqual('visual-tests/music-notation'); - // }); + it('visual-music-notation', async () => { + await testRoundTripFolderEqual('visual-tests/music-notation'); + }); - // it('visual-notation-legend', async () => { - // await testRoundTripFolderEqual('visual-tests/notation-legend'); - // }); + it('visual-notation-legend', async () => { + await testRoundTripFolderEqual('visual-tests/notation-legend'); + }); - // it('visual-special-notes', async () => { - // await testRoundTripFolderEqual('visual-tests/special-notes'); - // }); + it('visual-special-notes', async () => { + await testRoundTripFolderEqual('visual-tests/special-notes'); + }); - // it('visual-special-tracks', async () => { - // await testRoundTripFolderEqual('visual-tests/special-tracks'); - // }); + it('visual-special-tracks', async () => { + await testRoundTripFolderEqual('visual-tests/special-tracks'); + }); }); From 5b803a22df6d3b67cda2254d888f55ce13e48554 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 13 Dec 2020 23:26:45 +0100 Subject: [PATCH 14/31] Added part configuration writing --- src/exporter/Gp7Exporter.ts | 6 ++--- src/exporter/GpifWriter.ts | 4 --- src/importer/PartConfiguration.ts | 45 ++++++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts index 04aba2860..a9625998a 100644 --- a/src/exporter/Gp7Exporter.ts +++ b/src/exporter/Gp7Exporter.ts @@ -4,7 +4,7 @@ import { ZipEntry } from '@src/zip/ZipEntry'; import { ScoreExporter } from './ScoreExporter'; import { IOHelper } from '@src/io/IOHelper'; import { BinaryStylesheet } from '@src/importer/BinaryStylesheet'; -// import { PartConfiguration } from '@src/importer/PartConfiguration'; +import { PartConfiguration } from '@src/importer/PartConfiguration'; import { GpifWriter } from './GpifWriter'; import { ZipWriter } from '@src/zip/ZipWriter'; /** @@ -24,7 +24,7 @@ export class Gp7Exporter extends ScoreExporter { const gpifWriter: GpifWriter = new GpifWriter(); const gpifXml = gpifWriter.writeXml(score); const binaryStylesheet = BinaryStylesheet.writeForScore(score); - //const partConfiguration = PartConfiguration.writeForScore(score); + const partConfiguration = PartConfiguration.writeForScore(score); Logger.debug(this.name, 'Writing ZIP entries'); let fileSystem: ZipWriter = new ZipWriter(this.data); @@ -32,7 +32,7 @@ export class Gp7Exporter extends ScoreExporter { fileSystem.writeEntry(new ZipEntry('Content/', new Uint8Array(0))); fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); - //fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); + fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); fileSystem.end(); } } diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 6c952eaf3..c8e5f3c21 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -974,7 +974,6 @@ export class GpifWriter { trackNode.addElement('IconId').innerText = GpifWriter.getIconId(track.playbackInfo).toString(); this.writeInstrumentSetNode(trackNode, track); - // TODO write notationpatch this.writeTransposeNode(trackNode, track); this.writeRseNode(trackNode, track); @@ -1215,7 +1214,6 @@ export class GpifWriter { const sounds = trackNode.addElement('Sounds'); const sound = sounds.addElement('Sound'); - // TODO: right values sound.addElement('Name').setCData(`Track_${track.index}_Initial`); sound.addElement('Label').setCData(''); sound.addElement('Path').setCData(''); @@ -1226,8 +1224,6 @@ export class GpifWriter { midi.addElement('MSB').innerText = '0'; midi.addElement('Program').innerText = track.playbackInfo.program.toString(); - // TODO: check if RSE is mandatory - // TODO: generate sounds for all Program Changes. // they need an item here with a name and then we refer to it on the automations } diff --git a/src/importer/PartConfiguration.ts b/src/importer/PartConfiguration.ts index 8a07683a0..c287cc4c1 100644 --- a/src/importer/PartConfiguration.ts +++ b/src/importer/PartConfiguration.ts @@ -6,7 +6,6 @@ import { Staff } from '@src/model/Staff'; import { Track } from '@src/model/Track'; export class TrackConfiguration { - public isVisible: boolean = false; public showSlash: boolean = false; public showStandardNotation: boolean = false; public showTablature: boolean = false; @@ -81,8 +80,48 @@ export class PartConfiguration { } public static writeForScore(score: Score): Uint8Array { - const writer = ByteBuffer.withCapacity(0); - // TODO check for the right export of the settings. + const writer = ByteBuffer.withCapacity(128); + + const parts: Part[] = [ + new Part() // default part always exists + ]; + + for (const track of score.tracks) { + for (const staff of track.staves) { + + const trackConfiguration = new TrackConfiguration(); + trackConfiguration.showStandardNotation = staff.showStandardNotation; + trackConfiguration.showTablature = staff.showTablature; + + if (staff.index === 0) { + parts[0].tracks.push(trackConfiguration); + } else { + let part = new Part(); + part.tracks.push(trackConfiguration); + parts.push(part); + } + } + } + + IOHelper.writeInt32BE(writer, parts.length); + for (const part of parts) { + writer.writeByte(part.isMultiRest ? 1 : 0); + IOHelper.writeInt32BE(writer, part.tracks.length); + for(const track of part.tracks) { + let flags = 0; + if(track.showStandardNotation) { + flags |= 0x01; + } + if(track.showTablature) { + flags |= 0x02; + } + if(track.showSlash) { + flags |= 0x04; + } + writer.writeByte(flags); + } + } + return writer.toArray(); } } From 3310dc3cb3038414e412e84fc7105d8f6ff8f953 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 14 Dec 2020 00:25:48 +0100 Subject: [PATCH 15/31] Add support for sound changes in GP7 --- src/importer/GpifParser.ts | 121 +++++++++--- src/model/Automation.ts | 14 ++ src/xml/XmlNode.ts | 2 +- test-data/guitarpro7/program-change.gp | Bin 0 -> 9021 bytes test/importer/Gp7Importer.test.ts | 251 +++++++++++++------------ 5 files changed, 244 insertions(+), 144 deletions(-) create mode 100644 test-data/guitarpro7/program-change.gp diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index bf569a4c8..07dcb6655 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -57,6 +57,17 @@ export class GpifRhythm { public value: Duration = Duration.Quarter; } +class GpifSound { + public name: string = ''; + public path: string = ''; + public role: string = ''; + public get uniqueId(): string { + return this.path + ';' + this.name + ';' + this.role; + } + + public program: number = 0; +} + /** * This class can parse a score.gpif xml file into the model structure */ @@ -78,6 +89,7 @@ export class GpifParser { public score!: Score; private _masterTrackAutomations!: Map; + private _automationsPerTrackAndBar!: Map>; private _tracksMapping!: string[]; private _tracksById!: Map; private _masterBars!: MasterBar[]; @@ -93,12 +105,14 @@ export class GpifParser { private _notesOfBeat!: Map; private _tappedNotes!: Map; private _lyricsByTrack!: Map; + private _soundsByTrack!: Map>; private _hasAnacrusis: boolean = false; private _articulationByName!: Map; private _skipApplyLyrics: boolean = false; public parseXml(xml: string, settings: Settings): void { this._masterTrackAutomations = new Map(); + this._automationsPerTrackAndBar = new Map>(); this._tracksMapping = []; this._tracksById = new Map(); this._masterBars = []; @@ -114,6 +128,7 @@ export class GpifParser { this._noteById = new Map(); this._tappedNotes = new Map(); this._lyricsByTrack = new Map(); + this._soundsByTrack = new Map>(); this._skipApplyLyrics = false; let dom: XmlDocument = new XmlDocument(); @@ -245,7 +260,7 @@ export class GpifParser { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Automations': - this.parseAutomations(c, this._masterTrackAutomations); + this.parseAutomations(c, this._masterTrackAutomations, null); break; case 'Tracks': this._tracksMapping = c.innerText.split(' '); @@ -258,24 +273,25 @@ export class GpifParser { } } - private parseAutomations(node: XmlNode, automations: Map): void { + private parseAutomations(node: XmlNode, automations: Map, sounds: Map | null): void { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Automation': - this.parseAutomation(c, automations); + this.parseAutomation(c, automations, sounds); break; } } } } - private parseAutomation(node: XmlNode, automations: Map): void { + private parseAutomation(node: XmlNode, automations: Map, sounds: Map | null): void { let type: string | null = null; let isLinear: boolean = false; let barId: string | null = null; let ratioPosition: number = 0; - let value: number = 0; + let numberValue: number = 0; + let textValue: string | null = null; let reference: number = 0; let text: string | null = null; for (let c of node.childNodes) { @@ -294,15 +310,19 @@ export class GpifParser { ratioPosition = parseFloat(c.innerText); break; case 'Value': - let parts: string[] = c.innerText.split(' '); - // Issue 391: Some GPX files might have - // single floating point value. - if (parts.length === 1) { - value = parseFloat(parts[0]); - reference = 1; + if (c.firstElement && c.firstElement.nodeType === XmlNodeType.CDATA) { + textValue = c.innerText; } else { - value = parseFloat(parts[0]); - reference = parseInt(parts[1]); + let parts: string[] = c.innerText.split(' '); + // Issue 391: Some GPX files might have + // single floating point value. + if (parts.length === 1) { + numberValue = parseFloat(parts[0]); + reference = 1; + } else { + numberValue = parseFloat(parts[0]); + reference = parseInt(parts[1]); + } } break; case 'Text': @@ -317,7 +337,12 @@ export class GpifParser { let automation: Automation | null = null; switch (type) { case 'Tempo': - automation = Automation.buildTempoAutomation(isLinear, ratioPosition, value, reference); + automation = Automation.buildTempoAutomation(isLinear, ratioPosition, numberValue, reference); + break; + case 'Sound': + if (textValue && sounds && sounds.has(textValue)) { + automation = Automation.buildInstrumentAutomation(isLinear, ratioPosition, sounds.get(textValue)!.program); + } break; } if (automation) { @@ -401,7 +426,7 @@ export class GpifParser { this.parseGeneralMidi(track, c); break; case 'Sounds': - this.parseSounds(track, c); + this.parseSounds(trackId, track, c); break; case 'PlaybackState': let state: string = c.innerText; @@ -420,12 +445,21 @@ export class GpifParser { case 'RSE': this.parseRSE(track, c); break; + case 'Automations': + this.parseTrackAutomations(trackId, c); + break; } } } this._tracksById.set(trackId, track); } + private parseTrackAutomations(trackId: string, c: XmlNode) { + const trackAutomations = new Map() + this._automationsPerTrackAndBar.set(trackId, trackAutomations) + this.parseAutomations(c, trackAutomations, this._soundsByTrack.get(trackId)!); + } + private parseNotationPatch(track: Track, node: XmlNode) { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { @@ -512,7 +546,7 @@ export class GpifParser { } } - private parseArticulation(track: Track, node: XmlNode, elementType:string) { + private parseArticulation(track: Track, node: XmlNode, elementType: string) { const articulation = new InstrumentArticulation(); articulation.outputMidiNumber = -1; articulation.elementType = elementType; @@ -943,36 +977,56 @@ export class GpifParser { } } - private parseSounds(track: Track, node: XmlNode): void { + private parseSounds(trackId: string, track: Track, node: XmlNode): void { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Sound': - this.parseSound(track, c); + this.parseSound(trackId, track, c); break; } } } } - private parseSound(track: Track, node: XmlNode): void { + private parseSound(trackId: string, track: Track, node: XmlNode): void { + const sound = new GpifSound(); for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { + case 'Name': + sound.name = c.innerText; + break; + case 'Path': + sound.path = c.innerText; + break; + case 'Role': + sound.role = c.innerText; + break; case 'MIDI': - this.parseSoundMidi(track, c); + this.parseSoundMidi(sound, c); break; } } } + + if (sound.role === 'Factory' || track.playbackInfo.program === 0) { + track.playbackInfo.program = sound.program; + } + + if (!this._soundsByTrack.has(trackId)) { + this._soundsByTrack.set(trackId, new Map()); + } + + this._soundsByTrack.get(trackId)!.set(sound.uniqueId, sound); } - private parseSoundMidi(track: Track, node: XmlNode): void { + private parseSoundMidi(sound: GpifSound, node: XmlNode): void { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { case 'Program': - track.playbackInfo.program = parseInt(c.innerText); + sound.program = parseInt(c.innerText); break; } } @@ -2155,8 +2209,14 @@ export class GpifParser { } } - // clear out percussion articulations where not needed - for (const track of this.score.tracks) { + // clear out percussion articulations where not needed + // and add automations + for (let trackId of this._tracksMapping) { + if (!trackId) { + continue; + } + let track: Track = this._tracksById.get(trackId)!; + let hasPercussion = false; for (const staff of track.staves) { if (staff.isPercussion) { @@ -2167,6 +2227,19 @@ export class GpifParser { if (!hasPercussion) { track.percussionArticulations = []; } + + if (this._automationsPerTrackAndBar.has(trackId)) { + const trackAutomations = this._automationsPerTrackAndBar.get(trackId)!; + trackAutomations.forEach((automations, barId) => { + const bar = this._barsById.get(barId)!; + if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { + const beat = bar.voices[0].beats[0]; + automations.forEach(a => { + beat.automations.push(a); + }); + } + }); + } } } // build masterbar automations diff --git a/src/model/Automation.ts b/src/model/Automation.ts index 4fa9a336d..cc14e660e 100644 --- a/src/model/Automation.ts +++ b/src/model/Automation.ts @@ -68,4 +68,18 @@ export class Automation { automation.value = value * references[reference]; return automation; } + + + public static buildInstrumentAutomation( + isLinear: boolean, + ratioPosition: number, + value: number + ): Automation { + let automation: Automation = new Automation(); + automation.type = AutomationType.Instrument; + automation.isLinear = isLinear; + automation.ratioPosition = ratioPosition; + automation.value = value; + return automation; + } } diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index 352764e93..38d323022 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -42,7 +42,7 @@ export class XmlNode { public addChild(node: XmlNode): void { this.childNodes.push(node); this.firstChild = node; - if (node.nodeType === XmlNodeType.Element) { + if (node.nodeType === XmlNodeType.Element || node.nodeType === XmlNodeType.CDATA) { this.firstElement = node; } } diff --git a/test-data/guitarpro7/program-change.gp b/test-data/guitarpro7/program-change.gp new file mode 100644 index 0000000000000000000000000000000000000000..49288864aa0b6647c6c4aa9b5640f262f00e7a50 GIT binary patch literal 9021 zcmaKyWl$Z@w)Qt0mmnK=C%9X1cXxujYmngXF2RF)a1HJb8weJHy9alB!&{Ym&;8$f z&YJ3)neNq3b=UeZ>$j$rWFet20RNZ4{pl2Suy--DcVSZc|6Xu_x4!>rIDcOMdWl%s z8##NZx_H={eX=w&b1Bl1bs*4mtFr$^9!I}aNU7p2ZLMsrjThG!o&^w&Pxv_zHtdf9 z?>1J~0ax65sj63%7mnWU8=wwVsiSl8wFGf{K zEk0F1CMZtOlbN80-uY))yX&#X(b<}S6F+E@Tl457=w`#dV?KTMFlOdP_?upijeKG< z(gJL!B=Y;(HF*My)t}wc$#*USt?(Q!%knF!+Y~niKNa6IyBx$kwmd@@rvC0hqL?qX z;x9s1$Lbd=0E{zJ7OnHRDh0{RoS5>est($&Phkl1;5fFrGS zLFd-^wgQtNtP(Ju!u{ogwbg^DncYxJ(rv2ZO~e{;VcQ=08NpNO!@lZ}Hke<^!a8v( zC_VKypE@Ka`@7GD3m=phJFtsbB}!RG-Cz31^pu>Xdt`~FdEUW!6U$$5< z2!yYo2Xd+-j3EIU`VE3G?;mbRBKfU*$OYk^NCWKD@i~S({4*Z=p=Vl!qg=>&xQ&Ya z+FM#YP}<>zd1E6y1)|fm52|kSzhizM0rZ|VY2A+eR9yM~7;&+~;k@C>Jofr-H;{ z5FaR|JqdmzOCA&+3_6zDur?1nVp#2c_R=WUV9oCa%=4U2N(*6s_DS&U68~{-=>z4* z8{EEm(0eRcVwX`8y;ZSKT@SmCZ&w=*c3i!DjZ1+$3*RL?qp?(tUb0Pagzv#9;tvCRFjA{wvq`FQeV{q2H%PKO?U4fl(dV-ilD=!6#gb@(zS2so|cJ759+g`Q( zTe0{Kl3UDn3U?ZJO%n&1${7-(4E~p&-wgpxqOOT~G34$?LVM}Q(fBm9ELFTTh+heW z$hoj9Z6`sXc#6EmG}A_lxPDPC*Tx|4*Y|?M1*(T`3b08o%zO!rhke7RiDB)rwSaui zB0uHx9kr^=FndXIk4>~$YC<*hEbW{3-yA066x}~w^X1oQM@1fRR6d#NI0_8sKwmsm zoS?@ItmVB1^5Kdtd!jaQh3ILinX`Ob+?#lfmxj+HIx2fM*QpNROV5(YMmIeGv$Ew$ zqu8kVT~7KsdFW%AMYfy2YgP4^9Xjyu_eLUk%%)(g`IaN$k^qGJWFKx4jo#}w8#wpT zbbFAIgaQMozt`ghAx#O*HVXL(*Dw#cVKx?KYW3*awB|%k#C_kLBk6;|NX4T2mJtSC zki%1iDH+XFCa0O__?DeNWMtuM2+6^B#gl=TTJ)lls=YY$LFQtVL*m*%H*C6T;Bo^{ zPm->@;!eN_Oj%LGNSn1o#om5IkI>dM_%(T+eCGCtCYc&u2hl;X*ZOL(F}_$AeHKly ztviX`WZIWlyci;=avBE^{FDBCVhj58@3DqQ?eEtc+PApH9;US)W=UnzF8cItbGm+7r{EU=v;WOr3=0+ z14-|LwCEz4eC~HrtE*_dA>gL0uFK?tP1ilAalHzpyUkJ!(W_1IRh9B6tvP`D2P5|T z>29r0V~=LthQ`C5s}Z95_Q)bkv!L~*N z-?6{@gv`XDbiEW8w?lUZQdKAXZe0oJR?a<)M@SrR?Xg^M8hjQ|)8DMkZKeHIZ3ESF zw2(3$Ir2Sg5JVJy>)%YN?9Gm>LfqW~9nvA&ya>fd#e&k5<8%I4jfFve(78W^dO$>c zggi_)l4PmNmgv$ApR`4fJe3cysF7E7YrT)HxPmWX7FXBcwr4_&O^yHXI*tv z5D#qHPb9i!pGY74k1u?U=ZkyUz?s)4TS;+>DA~u&N17g-Zcr>cRA+pOJNZ9}*KAW( zOOW7y8TuGs&A$rd%=xWGHU5z9{1MaJ3Yo@$AK3%VIg_#Ehs@6Cotv~ zp~0Z0Y{`|;u8_v*i#4!u0@UD0COMHb{P zJtYno4pEFMA%*_qlKTnc{eJlQ3;v+7+im}&X~!_UHE_>>c{D0LF)Dpo6p?^3;&^r` zKDkvXd2kxhBq!`r;;T3EN^)uZ+^a75`*Aw0XgfpjI$BT}LGEx*H+Z|Jd%W$yseNk* z;MdP9bqAQW7pfIsY`BQuJ}EP<*nE7YHu4nYnRbm#&$tpAKQM8D z+4Z3x#`qbTp9*C$XC*Xi6Pv<5S*FXumBA9{%{b!$9Ts{ulO7?p?oJQ-u%%nooXycv z#gdvd?aa6N>@Bw?pW2N-!1&Be%0f5IaE5(JeL2TqRJsT0&Ruvh8Ri?-gzY)aYoM-9 z)Lm@lI;qq)7PTsjGnxVGSWl{#R7YVcvDZIFvBb#WLO)AktofxEm{%5Mt*LR1Fk-f0 zQ4l;Z-_A&o4z0rYx=gr_up+66dH?!~$f;rJ5VyfW#Hpj%`7#(EvZ2HS|J0$5dFzQb z9e?JKY>(N7zDcOsFY|s*QpjT!tA{X#EL{>aSTm+CxFz&+MdlBS`0|(7Z35JRZxVjS zW4Jp0cb9Idq~M23IZ?w6!L9K+!Sqnas|wc|z0~kw^<097AB&n7u`K*N77LlL^=tM! z94bErY|`HMDfGL5Pp3-kYfcz&ZFian`x1K8FKl3-rnoh@AfjV4<}w;jD@;Bz+mnvB zGJo4k2F@Qz)Dcl@8CF*u{vKW^sV3OND`ubMj?yJ))vPCMH`F~%!&j>-LVP?M{t(l8 zW7>b~fjAvvDZ3WP<(6O1yj4?T|AV;iipN~^Z76;3OqIAY7X5OaRZ7g4OaTA>o=!_EhRtl^yGCI>7@z?L1PkB!M*aw`(wL zsOW0EuqeFSe3zlqOrM83@vpiokM#js$czN`-I3vxmUE`92opF|;TBMp@~uHruPe1F z(z3ER*ye^KP^3jy(>|`tX9G9g(AWoym+oT{&b6(DpSp>$mfP;~d{6&;scD)IV1!); zX|=}9w1UOzVnI*NGKSrL@CsP(Ass!oI5?vDkpMiMg6$s7rBxRZhm{$;J?+6K99Y?1>X0|M@EwgdehPnxSKpa>u_kmd8A2jhyvn&k^LxBU&N&BIT$ zG64HRwyc@Ty*B6=oD7LpdY*t^+Jh83SHr{X+Ss`0Q`(!vtFzX$9oRzD;4XS2?^I|J z3HNJfMl(O^j6l^oF72d7(O%2_Fx^7E21W;Z<>_LBR;CwNBd_3TQ=0h$m|+Scg|;j1 zUj~CXyd{_I41@jmF%@&>&_+YcW#20mC9UCBJOZ-17YI$HuE>ty+bRRgP7e#L z&rN+WAfclU+ycx^-Di$j)Dah~E+)87?cZ6AxIpsAbb-FV<`xS&V0>(>hJHpX)(+RR zGn3EZL;hCj{aMyVWYN(ao#UFpCo94Jh%Zv)Y(QHytJ0UQ+2irr>j8b91DONRi5`1a zcTdf^TF&x_3it}vUspoFw3ceJ;Z2Wk56$?&Ga31!B*7io{5?L7i#kHzO}ZOKAz%3% zLt?wOni+Wo8D55*i47($M6eOaZNqzlzS=QtV*9AD@;SODib%%f3j)Hey95s?$={63CIA?bXB4ns92QKWd?naxF&^h<5qH zrD^NUgU=dE7C+0*2rbY@+kD|$=jQdzk&ShgqLNzq2$k_9jES_FEuRdxvC#~{%$bxN zfg@gn-Bce@EW`<@NXV!+ig|&5o3c;`? zFfj!WPDW5$SwdV7siMV0>1A{S2rH-%r&d~xMObupc6-f553*`ulcc&!d1+e^m37}p z9GszYFc48u@$6w{XP7MFNMJ?mAJ1~4%g!J8;=9xmzh<;yg;X(BYR&>@=-803LX>}B z-fqxscxUZ!^lim2errt1Gdx_(3qjwNfsJX;aYcpI z$CeRU>)kq^<~O$nd^xt|x;nBo?Ew}!WPD#0P{mpIM|&>c>^?02!n%Akru>Qac$gz@ zdopx0iT%Zks~6Ayjv}l=7HggqV|b0dVnJ-p zp}xd9Qe(;fusIVA@^x7e8cw>S6a231^Nd9fcCsfJ_0sa=FawlA>Icn5y}%E>>-Vh^ zzpQ3uJ3nh4<~=hEBFEjSnGqK2f?`AV|%q<-EJPz~y2bi3dTCdqnI4{3yi zIRXdm<=G&ZAGyU|QgC}!OOotP>K%i|e^vUlWH_tSEiK+syT?r0U{D>y7adb}WJ)6- zvNP(N=w)9R=^F_JqZ^GKSQf${N_|mXQIKx-502B5i#O*CV#l9g%C#L1(1xJ52}~|> zFmaciucq56N@1m!j4gIGFQQCTUOgo%EoBxm$_aWmNPrPZa!4lAP>0iqoa;Wc$%Ti& zGcOV|L9XveTYW=Zm8CE@JPZ;nnFi`WFSIgi z)y{8^0%bDUe)$`Jdt$EpJc%-z*c@%61KuuvR%f4rF6ilE(FLOsKDo|jmIp&k{3SZFy^H&;nx9HxyP4>GT1QT_>qpqLJ z<7>V&9!TA96^QqCR>C2bv?g6oH%B{CY$J&K^Rxh<*(BH*yD$zLw1SvFUbeGKdu|m)>~) z+Fu0*%@sMdM9H|*R-DWxcxn=LTuW27;tQ^tf*PHI#J!ZhdDnhoA}B!U zae3!N6L|-B>lB304G4&O3y;FhwMh*aY|ECW5?+cCi|59j_ zGxBh7b@@|vG`F&FbvAOba+f;aer(7UJ&fqYWF5C!( zX%eG=|M#5hkC4)g>Q@YEOvRmB8iD$F;WNz8G=?Oo^O|+?*LZX8p~9TUnLR%^jOtC zOj2!vKCvQ4&{J= zcPr&Q=qgb&r6ZN?y__BOY}`3N9XWJ)R8<=JCrxO$rmm;(VkH*UP3J)7ab=k)*Q@q? z{LRZ4*f3pU#Bj?eo4&R`Q{%nNjjXXT`}pxUgknmd9#aN>#k!;KpUife!XKt-d4~H7 z*=2(7#Ke5-$KN)L>57?B&<#68Yzd?AEyaSWpfto*MBI?Os4SA!jIY5LB3Nx0szdY9__dA_qW3vlWzI(!W5VGoAOVR79k*dM_WY=w2x{1%5A_ z$baNlRXNyGe5JxhM9%>2IoGsXBVwUIhQ;Xa*KUd?U%7CV05P^Ue#iAfRwgFi)K7YlPuye2;{c*1j9{W(n>gS8$$Vkri*xk=Kdq)wJ`F~i19k7P)yLIvx@vtD2M z@n921zfa~%*;g4E(IX0zM7Xa_MqHMYfr#3Y^37EccCvdtW?aP?q}ck^U3MS9a9wF; zWN_vzvmH}60@3;qj0uSBV>D>87|Gi{2}My^9!4(N(n{-<0za4?tQu-FcR`cdH?k&KUMSp)h}4oO50)zLJ+i!J>$@;?5Hx|7MpJ$i(xG@29;! zo%0@CN`{K|)G~#uw1pY2$}tTOl8#e%y_Tn_9jy!GHeDgN(?|6vXezk}M7-HO1q4HZ zQ;cGGbBdSTben~xhmU=ey`#mrCn}yYGzq2xLlb$8<#>lO{`rdX9o*F?VbmewM;0LP z*kBtpN?9xO@KE=BSy%X?yhOmeP5}xjp;2JB&a?$m8e;)23O^)67>Q=0Tz0*G2RI-1 z5O39#U5MdUo(clyp_m$y`<+mLa!haET43XqS-db$oAk%F%^W+&IeV$NAM4!mpUWHU zNRwG^o#x6R+Ab*Xr8VR%?`pE#jj0a3|_(nk)h5rfZRgpHj>C+q}NkR~~lGN;10BH7SX zTlPKv%A+|Y*+DO5mi`rI-vNiT$E6uMUM}l6QAcRK%3Y5y`@7rwyHO1e4Q$J9Fqz^) zOX5=Qs3KE+-sHtPwb}KHg+V$2OWYYOc#jP%)jcrc^lOR1Kc z#qd7hz}+Ma(gkLPnpO|$F{~R_`;=+|^^x^ywowJbVWsZIVkikXB}_}S9%TEy&lvg% zM4l6cR1K7JyS`Hf@`l78+fpoT{YLFa&5!hfXj8z}q)&;DSPRLa7~UmJd5 zCU)|YiXqR$R{H6ajXg5dV$BF?Tq*ZOD-hCmwYi{?7)o&EXbP)6!u1VxzY=bojJB)P z3S_;K_=0;JbYo(4FpADkoC>omZiZ``Oj6`DtSskG`>P4hBx9OIxBxp1 zEm$wfyKM@#Z8rW9L~K^x{1p#6gW{!qk-yH7xkOra7RRuj*#-)dvP$IClI%N(vPOt%(Le=KPjZ~d z%DNbbB*k^)cj>w@p^9+E#97;i(wqL^9!jXY*>!t%pQ4KBl&T68o=bL#l42eobtA)J z(uTk*rnn6kFCRWjaPWuI;!AcBNYj83_`R}Ey&jBN`~0p7SJ{Z~9~8f$KkxNM^vvw^ zW1`6|Oi!l9?3p))PJR)c9PEqBrVGoC>00!yBEaLrMn2)wMCQMi${Xj2QZ>{rN}CgR zJ)umi@(5Y^%x`|e1{L&U$F6k`IE{Xanmi0*Uzr^ zLIA)c!ha$O*gt8rhPaBVw4wsr0viAjhTe7w`KJ&1Pg9bG00JQY{RxXdE`JOa@GAUv z|C@aOo%Q#`#Tz2M;n5o=y>Z50dkvua^Z0kxKhIzMQ{`W|=nbd-+H1g{AHM&k@_)e9 zKZV|a=naP6w)KWlf9*A3{a=Ls7gYUI<_${TfTa6R`=7gF#{BQ~{F9~rsqz-1xA?rp z=?!51+H1h&zo`5-&ir%!TeRLH^%k+WNdC3g09w-jimQ?=G|bxo?4N500st`lGXwzq EKe4%HqW}N^ literal 0 HcmV?d00001 diff --git a/test/importer/Gp7Importer.test.ts b/test/importer/Gp7Importer.test.ts index 01f6d89c5..5183c781f 100644 --- a/test/importer/Gp7Importer.test.ts +++ b/test/importer/Gp7Importer.test.ts @@ -16,6 +16,7 @@ import { WhammyType } from '@src/model/WhammyType'; import { Settings } from '@src/Settings'; import { GpImporterTestHelper } from '@test/importer/GpImporterTestHelper'; import { TestPlatform } from '@test/TestPlatform'; +import { AutomationType } from '@src/model/Automation'; describe('Gp7ImporterTest', () => { const prepareGp7ImporterWithFile:(name:string) => Promise = async (name: string): Promise => { @@ -127,137 +128,137 @@ describe('Gp7ImporterTest', () => { let note: Note = score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.BendRelease); expect(note.bendPoints.length).toEqual(4); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(10); + expect(note.bendPoints[1].offset).toBeCloseTo(10.2); expect(note.bendPoints[1].value).toEqual(4); - expect(note.bendPoints[2].offset).toEqual(20); + expect(note.bendPoints[2].offset).toBeCloseTo(20.4); expect(note.bendPoints[2].value).toEqual(4); - expect(note.bendPoints[3].offset).toEqual(30); + expect(note.bendPoints[3].offset).toBeCloseTo(30); expect(note.bendPoints[3].value).toEqual(0); // // Bar 2 note = score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(59); + expect(note.bendPoints[1].offset).toBeCloseTo(59.4); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.BendRelease); expect(note.bendPoints.length).toEqual(4); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(10); + expect(note.bendPoints[1].offset).toBeCloseTo(10.2); expect(note.bendPoints[1].value).toEqual(4); - expect(note.bendPoints[2].offset).toEqual(45); + expect(note.bendPoints[2].offset).toBeCloseTo(45.6); expect(note.bendPoints[2].value).toEqual(4); - expect(note.bendPoints[3].offset).toEqual(59); + expect(note.bendPoints[3].offset).toBeCloseTo(59.4); expect(note.bendPoints[3].value).toEqual(0); // // Bar 3 note = score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Prebend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(60); + expect(note.bendPoints[1].offset).toBeCloseTo(60); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.PrebendBend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(6); // // Bar 4 note = score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.PrebendRelease); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(0); // // Bar 5 note = score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(14); + expect(note.bendPoints[1].offset).toBeCloseTo(14.4); expect(note.bendPoints[1].value).toEqual(8); note = score.tracks[0].staves[0].bars[4].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.BendRelease); expect(note.bendPoints.length).toEqual(4); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(9); + expect(note.bendPoints[1].offset).toBeCloseTo(9); expect(note.bendPoints[1].value).toEqual(8); - expect(note.bendPoints[2].offset).toEqual(20); + expect(note.bendPoints[2].offset).toBeCloseTo(20.4); expect(note.bendPoints[2].value).toEqual(8); - expect(note.bendPoints[3].offset).toEqual(31); + expect(note.bendPoints[3].offset).toBeCloseTo(31.2); expect(note.bendPoints[3].value).toEqual(4); // // Bar 6 note = score.tracks[0].staves[0].bars[5].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Prebend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(8); - expect(note.bendPoints[1].offset).toEqual(60); + expect(note.bendPoints[1].offset).toBeCloseTo(60); expect(note.bendPoints[1].value).toEqual(8); note = score.tracks[0].staves[0].bars[5].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.PrebendBend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(8); - expect(note.bendPoints[1].offset).toEqual(16); + expect(note.bendPoints[1].offset).toBeCloseTo(16.2); expect(note.bendPoints[1].value).toEqual(12); // // Bar 7 note = score.tracks[0].staves[0].bars[6].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.PrebendRelease); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(8); - expect(note.bendPoints[1].offset).toEqual(14); + expect(note.bendPoints[1].offset).toBeCloseTo(14.4); expect(note.bendPoints[1].value).toEqual(4); // // Bar 8 note = score.tracks[0].staves[0].bars[7].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); // // Bar 9 note = score.tracks[0].staves[0].bars[8].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.BendRelease); expect(note.bendPoints.length).toEqual(4); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(10); + expect(note.bendPoints[1].offset).toBeCloseTo(10.2); expect(note.bendPoints[1].value).toEqual(4); - expect(note.bendPoints[2].offset).toEqual(20); + expect(note.bendPoints[2].offset).toBeCloseTo(20.4); expect(note.bendPoints[2].value).toEqual(4); - expect(note.bendPoints[3].offset).toEqual(30); + expect(note.bendPoints[3].offset).toBeCloseTo(30); expect(note.bendPoints[3].value).toEqual(0); // Combined Bends @@ -265,63 +266,63 @@ describe('Gp7ImporterTest', () => { note = score.tracks[0].staves[0].bars[9].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[9].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.Release); expect(note.isContinuedBend).toBe(true); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(0); note = score.tracks[0].staves[0].bars[9].voices[0].beats[2].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.isContinuedBend).toBe(false); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); // // Bar 11 note = score.tracks[0].staves[0].bars[10].voices[0].beats[0].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[10].voices[0].beats[1].notes[0]; expect(note.bendType).toEqual(BendType.Bend); expect(note.isContinuedBend).toBe(true); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(8); note = score.tracks[0].staves[0].bars[10].voices[0].beats[2].notes[0]; expect(note.bendType).toEqual(BendType.Release); expect(note.isContinuedBend).toBe(true); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(8); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[10].voices[0].beats[3].notes[0]; expect(note.bendType).toEqual(BendType.Release); expect(note.isContinuedBend).toBe(true); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(0); // Grace Bends @@ -331,9 +332,9 @@ describe('Gp7ImporterTest', () => { expect(note.beat.graceType).toEqual(GraceType.BeforeBeat); expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); // // Bar 13 @@ -341,18 +342,18 @@ describe('Gp7ImporterTest', () => { expect(note.beat.graceType).toEqual(GraceType.BeforeBeat); expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[12].voices[0].beats[1].notes[0]; expect(note.isContinuedBend).toBe(true); expect(note.bendType).toEqual(BendType.Hold); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(60); + expect(note.bendPoints[1].offset).toBeCloseTo(60); expect(note.bendPoints[1].value).toEqual(4); // // Bar 14 @@ -360,18 +361,18 @@ describe('Gp7ImporterTest', () => { expect(note.beat.graceType).toEqual(GraceType.OnBeat); expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(18); + expect(note.bendPoints[1].offset).toBeCloseTo(18); expect(note.bendPoints[1].value).toEqual(1); note = score.tracks[0].staves[0].bars[13].voices[0].beats[1].notes[0]; expect(note.isContinuedBend).toBe(true); expect(note.bendType).toEqual(BendType.Hold); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(1); - expect(note.bendPoints[1].offset).toEqual(60); + expect(note.bendPoints[1].offset).toBeCloseTo(60); expect(note.bendPoints[1].value).toEqual(1); // // Bar 15 @@ -379,9 +380,9 @@ describe('Gp7ImporterTest', () => { expect(note.beat.graceType).toEqual(GraceType.BeforeBeat); expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[14].voices[0].beats[1].notes[0]; @@ -390,9 +391,9 @@ describe('Gp7ImporterTest', () => { expect(note.isContinuedBend).toBe(true); expect(note.bendType).toEqual(BendType.Hold); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(4); - expect(note.bendPoints[1].offset).toEqual(60); + expect(note.bendPoints[1].offset).toBeCloseTo(60); expect(note.bendPoints[1].value).toEqual(4); note = score.tracks[0].staves[0].bars[14].voices[0].beats[1].notes[1]; @@ -408,9 +409,9 @@ describe('Gp7ImporterTest', () => { note = score.tracks[0].staves[0].bars[15].voices[0].beats[0].notes[1]; expect(note.bendType).toEqual(BendType.Bend); expect(note.bendPoints.length).toEqual(2); - expect(note.bendPoints[0].offset).toEqual(0); + expect(note.bendPoints[0].offset).toBeCloseTo(0); expect(note.bendPoints[0].value).toEqual(0); - expect(note.bendPoints[1].offset).toEqual(15); + expect(note.bendPoints[1].offset).toBeCloseTo(15); expect(note.bendPoints[1].value).toEqual(4); }); @@ -422,153 +423,153 @@ describe('Gp7ImporterTest', () => { let beat: Beat = score.tracks[0].staves[0].bars[0].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(45); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(45); expect(beat.whammyBarPoints[1].value).toEqual(-4); beat = score.tracks[0].staves[0].bars[0].voices[0].beats[2]; expect(beat.whammyBarType).toEqual(WhammyType.PrediveDive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-4); - expect(beat.whammyBarPoints[1].offset).toEqual(60); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(60); expect(beat.whammyBarPoints[1].value).toEqual(-16); // Bar 2 beat = score.tracks[0].staves[0].bars[1].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(3); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(15); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(15); expect(beat.whammyBarPoints[1].value).toEqual(-16); - expect(beat.whammyBarPoints[2].offset).toEqual(30); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(30); expect(beat.whammyBarPoints[2].value).toEqual(0); beat = score.tracks[0].staves[0].bars[1].voices[0].beats[2]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(4); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(14); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(14.4); expect(beat.whammyBarPoints[1].value).toEqual(-12); - expect(beat.whammyBarPoints[2].offset).toEqual(31); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(31.8); expect(beat.whammyBarPoints[2].value).toEqual(-12); - expect(beat.whammyBarPoints[3].offset).toEqual(53); + expect(beat.whammyBarPoints[3].offset).toBeCloseTo(53.4); expect(beat.whammyBarPoints[3].value).toEqual(0); // Bar 3 beat = score.tracks[0].staves[0].bars[2].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(3); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(15); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(15); expect(beat.whammyBarPoints[1].value).toEqual(-16); - expect(beat.whammyBarPoints[2].offset).toEqual(30); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(30); expect(beat.whammyBarPoints[2].value).toEqual(0); beat = score.tracks[0].staves[0].bars[2].voices[0].beats[2]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(4); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(14); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(14.4); expect(beat.whammyBarPoints[1].value).toEqual(-12); - expect(beat.whammyBarPoints[2].offset).toEqual(31); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(31.8); expect(beat.whammyBarPoints[2].value).toEqual(-12); - expect(beat.whammyBarPoints[3].offset).toEqual(53); + expect(beat.whammyBarPoints[3].offset).toBeCloseTo(53.4); expect(beat.whammyBarPoints[3].value).toEqual(0); // Bar 4 beat = score.tracks[0].staves[0].bars[3].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Predive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-8); - expect(beat.whammyBarPoints[1].offset).toEqual(60); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(60); expect(beat.whammyBarPoints[1].value).toEqual(-8); // Bar 5 beat = score.tracks[0].staves[0].bars[4].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.PrediveDive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-4); - expect(beat.whammyBarPoints[1].offset).toEqual(30); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(30); expect(beat.whammyBarPoints[1].value).toEqual(0); // Bar 6 beat = score.tracks[0].staves[0].bars[5].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.PrediveDive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-4); - expect(beat.whammyBarPoints[1].offset).toEqual(29); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(29.4); expect(beat.whammyBarPoints[1].value).toEqual(-12); beat = score.tracks[0].staves[0].bars[5].voices[0].beats[1]; expect(beat.whammyBarType).toEqual(WhammyType.Dive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-12); - expect(beat.whammyBarPoints[1].offset).toEqual(45); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(45.6); expect(beat.whammyBarPoints[1].value).toEqual(0); // Bar 7 beat = score.tracks[0].staves[0].bars[6].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(45); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(45); expect(beat.whammyBarPoints[1].value).toEqual(-4); beat = score.tracks[0].staves[0].bars[6].voices[0].beats[1]; expect(beat.whammyBarType).toEqual(WhammyType.Hold); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-4); - expect(beat.whammyBarPoints[1].offset).toEqual(60); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(60); expect(beat.whammyBarPoints[1].value).toEqual(-4); // Bar 8 beat = score.tracks[0].staves[0].bars[7].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-4); - expect(beat.whammyBarPoints[1].offset).toEqual(46); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(46.2); expect(beat.whammyBarPoints[1].value).toEqual(-12); beat = score.tracks[0].staves[0].bars[7].voices[0].beats[1]; expect(beat.whammyBarType).toEqual(WhammyType.Dive); expect(beat.whammyBarPoints.length).toEqual(2); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(-12); - expect(beat.whammyBarPoints[1].offset).toEqual(44); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(44.4); expect(beat.whammyBarPoints[1].value).toEqual(8); // Bar 9 beat = score.tracks[0].staves[0].bars[8].voices[0].beats[0]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(3); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(8); - expect(beat.whammyBarPoints[1].offset).toEqual(15); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(15); expect(beat.whammyBarPoints[1].value).toEqual(12); - expect(beat.whammyBarPoints[2].offset).toEqual(30); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(30); expect(beat.whammyBarPoints[2].value).toEqual(0); beat = score.tracks[0].staves[0].bars[8].voices[0].beats[1]; expect(beat.whammyBarType).toEqual(WhammyType.Dip); expect(beat.whammyBarPoints.length).toEqual(3); - expect(beat.whammyBarPoints[0].offset).toEqual(0); + expect(beat.whammyBarPoints[0].offset).toBeCloseTo(0); expect(beat.whammyBarPoints[0].value).toEqual(0); - expect(beat.whammyBarPoints[1].offset).toEqual(15); + expect(beat.whammyBarPoints[1].offset).toBeCloseTo(15); expect(beat.whammyBarPoints[1].value).toEqual(-4); - expect(beat.whammyBarPoints[2].offset).toEqual(30); + expect(beat.whammyBarPoints[2].offset).toBeCloseTo(30); expect(beat.whammyBarPoints[2].value).toEqual(0); }); @@ -578,49 +579,49 @@ describe('Gp7ImporterTest', () => { expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints.length).toEqual(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].value).toEqual(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints.length).toEqual(2); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].value).toEqual(0); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints.length).toEqual(4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[3].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[3].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[3].value).toEqual(-4); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints.length).toEqual(4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(15); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(15); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(30.6); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].value).toEqual(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].offset).toEqual(45); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].offset).toBeCloseTo(45); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].value).toEqual(0); }); @@ -893,4 +894,16 @@ describe('Gp7ImporterTest', () => { expect(score.tracks[3].playbackInfo.balance).toBe(12); expect(score.tracks[4].playbackInfo.balance).toBe(16); }); + + it('program-change', async () => { + const reader = await prepareGp7ImporterWithFile('guitarpro7/program-change.gp'); + let score: Score = reader.readScore(); + + expect(score.tracks[0].playbackInfo.program).toBe(25); + const automation = score.tracks[0].staves[0].bars[2].voices[0].beats[0].getAutomation(AutomationType.Instrument); + expect(automation).toBeTruthy(); + if(automation) { + expect(automation.value).toBe(29); + } + }); }); From 9b1f156a6f26ea735fe37b7fc9aee89e1629e377 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 14 Dec 2020 01:28:28 +0100 Subject: [PATCH 16/31] Proper handling of instrument changes --- src/exporter/GpifWriter.ts | 95 +++++++++++++++++++++++++++++--------- src/importer/GpifParser.ts | 54 +++++++++++----------- 2 files changed, 100 insertions(+), 49 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index c8e5f3c21..697104e85 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1,6 +1,7 @@ import { GeneralMidi } from '@src/midi/GeneralMidi'; import { MidiUtils } from '@src/midi/MidiUtils'; import { AccentuationType } from '@src/model/AccentuationType'; +import { AutomationType } from '@src/model/Automation'; import { Bar } from '@src/model/Bar'; import { Beat } from '@src/model/Beat'; import { BendPoint } from '@src/model/BendPoint'; @@ -980,7 +981,6 @@ export class GpifWriter { trackNode.addElement('ForcedSound').innerText = '-1'; - this.writeSoundsNode(trackNode, track); this.writeMidiConnectionNode(trackNode, track); if (track.playbackInfo.isSolo) { @@ -997,7 +997,7 @@ export class GpifWriter { this.writeStavesNode(trackNode, track); - this.writeAutomations(trackNode, track); + this.writeSoundsAndAutomations(trackNode, track); } private static getIconId(playbackInfo: PlaybackInformation): GpifIconIds { @@ -1010,9 +1010,76 @@ export class GpifWriter { return GpifIconIds.SteelGuitar; } - private writeAutomations(trackNode: XmlNode, _track: Track) { - trackNode.addElement('Automations'); - // TODO: instrument automations + private writeSoundAndAutomation( + soundsNode: XmlNode, + automationsNode: XmlNode, + name: string, path: string, role: string, + barIndex: number, program: number, + ratioPosition: number = 0) { + + const soundNode = soundsNode.addElement('Sound'); + soundNode.addElement('Name').setCData(name); + soundNode.addElement('Label').setCData(name); + soundNode.addElement('Path').setCData(path); + soundNode.addElement('Role').setCData(role); + + const midi = soundNode.addElement('MIDI'); + midi.addElement('LSB').innerText = '0'; + midi.addElement('MSB').innerText = '0'; + midi.addElement('Program').innerText = program.toString(); + + const automationNode = automationsNode.addElement('Automation'); + automationNode.addElement('Type').innerText = 'Sound'; + automationNode.addElement('Linear').innerText = 'false'; + automationNode.addElement('Bar').innerText = barIndex.toString(); + automationNode.addElement('Position').innerText = ratioPosition.toString(); + automationNode.addElement('Visible').innerText = "true"; + automationNode.addElement('Value').setCData(`${path};${name};${role}`); + } + + private writeSoundsAndAutomations(trackNode: XmlNode, track: Track) { + const soundsNode = trackNode.addElement('Sounds'); + const automationsNode = trackNode.addElement('Automations'); + + if (track.staves.length > 0 && track.staves[0].bars.length > 0) { + const trackSoundName = `Track_${track.index}_Initial`; + const trackSoundPath = `Midi/${track.playbackInfo.program}`; + const trackSoundRole = 'Factory'; + let trackSoundWritten = false; + + for (const staff of track.staves) { + for (const bar of staff.bars) { + for (const voice of bar.voices) { + for (const beat of voice.beats) { + const soundAutomation = beat.getAutomation(AutomationType.Instrument); + if (soundAutomation) { + const isTrackSound = bar.index === 0 && beat.index === 0; + const name = isTrackSound ? trackSoundName : `ProgramChange_${beat.id}`; + const path = isTrackSound ? trackSoundPath : `Midi/${soundAutomation.value}`; + const role = isTrackSound ? trackSoundRole : 'User'; + + if (!isTrackSound && !trackSoundWritten) { + this.writeSoundAndAutomation(soundsNode, automationsNode, + trackSoundName, trackSoundPath, trackSoundRole, + track.staves[0].bars[0].index, track.playbackInfo.program + ); + } + + this.writeSoundAndAutomation(soundsNode, automationsNode, + name, path, role, + bar.index, soundAutomation.value, + soundAutomation.ratioPosition + ); + + if(isTrackSound) { + trackSoundWritten = true; + } + } + } + } + } + } + } } private writeMidiConnectionNode(trackNode: XmlNode, track: Track) { @@ -1210,24 +1277,6 @@ export class GpifWriter { } } - private writeSoundsNode(trackNode: XmlNode, track: Track) { - const sounds = trackNode.addElement('Sounds'); - const sound = sounds.addElement('Sound'); - - sound.addElement('Name').setCData(`Track_${track.index}_Initial`); - sound.addElement('Label').setCData(''); - sound.addElement('Path').setCData(''); - sound.addElement('Role').setCData(''); - - const midi = sound.addElement('MIDI'); - midi.addElement('LSB').innerText = '0'; - midi.addElement('MSB').innerText = '0'; - midi.addElement('Program').innerText = track.playbackInfo.program.toString(); - - // TODO: generate sounds for all Program Changes. - // they need an item here with a name and then we refer to it on the automations - } - private writeTransposeNode(trackNode: XmlNode, track: Track) { const transpose = trackNode.addElement('Transpose'); diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 07dcb6655..0199b273c 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -88,8 +88,8 @@ export class GpifParser { public score!: Score; - private _masterTrackAutomations!: Map; - private _automationsPerTrackAndBar!: Map>; + private _masterTrackAutomations!: Map; + private _automationsPerTrackIdAndBarIndex!: Map>; private _tracksMapping!: string[]; private _tracksById!: Map; private _masterBars!: MasterBar[]; @@ -111,8 +111,8 @@ export class GpifParser { private _skipApplyLyrics: boolean = false; public parseXml(xml: string, settings: Settings): void { - this._masterTrackAutomations = new Map(); - this._automationsPerTrackAndBar = new Map>(); + this._masterTrackAutomations = new Map(); + this._automationsPerTrackIdAndBarIndex = new Map>(); this._tracksMapping = []; this._tracksById = new Map(); this._masterBars = []; @@ -273,7 +273,7 @@ export class GpifParser { } } - private parseAutomations(node: XmlNode, automations: Map, sounds: Map | null): void { + private parseAutomations(node: XmlNode, automations: Map, sounds: Map | null): void { for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { @@ -285,10 +285,10 @@ export class GpifParser { } } - private parseAutomation(node: XmlNode, automations: Map, sounds: Map | null): void { + private parseAutomation(node: XmlNode, automations: Map, sounds: Map | null): void { let type: string | null = null; let isLinear: boolean = false; - let barId: string | null = null; + let barIndex: number = -1; let ratioPosition: number = 0; let numberValue: number = 0; let textValue: string | null = null; @@ -304,7 +304,7 @@ export class GpifParser { isLinear = c.innerText.toLowerCase() === 'true'; break; case 'Bar': - barId = c.innerText; + barIndex = parseInt(c.innerText); break; case 'Position': ratioPosition = parseFloat(c.innerText); @@ -350,11 +350,11 @@ export class GpifParser { automation.text = text; } - if (barId) { - if (!automations.has(barId)) { - automations.set(barId, []); + if (barIndex >= 0) { + if (!automations.has(barIndex)) { + automations.set(barIndex, []); } - automations.get(barId)!.push(automation); + automations.get(barIndex)!.push(automation); } } } @@ -455,8 +455,8 @@ export class GpifParser { } private parseTrackAutomations(trackId: string, c: XmlNode) { - const trackAutomations = new Map() - this._automationsPerTrackAndBar.set(trackId, trackAutomations) + const trackAutomations = new Map() + this._automationsPerTrackIdAndBarIndex.set(trackId, trackAutomations) this.parseAutomations(c, trackAutomations, this._soundsByTrack.get(trackId)!); } @@ -2228,27 +2228,29 @@ export class GpifParser { track.percussionArticulations = []; } - if (this._automationsPerTrackAndBar.has(trackId)) { - const trackAutomations = this._automationsPerTrackAndBar.get(trackId)!; - trackAutomations.forEach((automations, barId) => { - const bar = this._barsById.get(barId)!; - if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { - const beat = bar.voices[0].beats[0]; - automations.forEach(a => { - beat.automations.push(a); - }); + if (this._automationsPerTrackIdAndBarIndex.has(trackId)) { + const trackAutomations = this._automationsPerTrackIdAndBarIndex.get(trackId)!; + trackAutomations.forEach((automations, barNumber) => { + if (track.staves.length > 0 && barNumber < track.staves[0].bars.length) { + const bar = track.staves[0].bars[barNumber]; + if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { + const beat = bar.voices[0].beats[0]; + automations.forEach(a => { + beat.automations.push(a); + }); + } } }); } } } // build masterbar automations - this._masterTrackAutomations.forEach((automations, barIndex) => { - let masterBar: MasterBar = this.score.masterBars[parseInt(barIndex)]; + this._masterTrackAutomations.forEach((automations, barNumber) => { + let masterBar: MasterBar = this.score.masterBars[barNumber]; for (let i: number = 0, j: number = automations.length; i < j; i++) { let automation: Automation = automations[i]; if (automation.type === AutomationType.Tempo) { - if (barIndex === '0') { + if (barNumber === 0) { this.score.tempo = automation.value | 0; if (automation.text) { this.score.tempoLabel = automation.text; From d6e780b4d4e20858bec5ffc920ea280ea7cbbebc Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 14 Dec 2020 15:31:23 +0100 Subject: [PATCH 17/31] Fixed tests --- src/exporter/GpifWriter.ts | 28 ++++++++---- src/importer/GpifParser.ts | 35 +++++++++------ src/midi/MidiFileGenerator.ts | 18 +++++--- src/model/Tuning.ts | 2 +- src/rendering/effects/DynamicsEffectInfo.ts | 20 +++++++-- src/rendering/layout/ScoreLayout.ts | 11 +++-- .../effects-and-annotations/brush.gp | Bin 8979 -> 9004 bytes .../effects-and-annotations/chords.gp | Bin 9966 -> 10003 bytes .../effects-and-annotations/dynamics.gp | Bin 8848 -> 8852 bytes .../effects-and-annotations/fade-in.gp | Bin 8918 -> 8878 bytes .../effects-and-annotations/let-ring.gp | Bin 9079 -> 9104 bytes .../effects-and-annotations/markers.gp | Bin 8877 -> 8653 bytes .../effects-and-annotations/palm-mute.gp | Bin 8847 -> 8871 bytes .../effects-and-annotations/pick-stroke.gp | Bin 8920 -> 8948 bytes .../effects-and-annotations/slides.gp | Bin 9059 -> 9084 bytes .../effects-and-annotations/tap.gp | Bin 8828 -> 8852 bytes .../effects-and-annotations/tempo.gp | Bin 8774 -> 8567 bytes .../effects-and-annotations/text.gp | Bin 8885 -> 8912 bytes .../tremolo-picking.gp | Bin 9006 -> 9031 bytes .../effects-and-annotations/trill.gp | Bin 8823 -> 8848 bytes .../effects-and-annotations/tuplets.gp | Bin 9242 -> 9209 bytes .../effects-and-annotations/vibrato.gp | Bin 9009 -> 8967 bytes .../visual-tests/general/alternate-endings.gp | Bin 8968 -> 8895 bytes test-data/visual-tests/general/repeats.gp | Bin 8842 -> 8646 bytes .../visual-tests/general/song-details.gp | Bin 8694 -> 8546 bytes test-data/visual-tests/general/tuning.gp | Bin 8861 -> 8805 bytes .../guitar-tabs/rhythm-with-beams.gp | Bin 9987 -> 9954 bytes test-data/visual-tests/guitar-tabs/rhythm.gp | Bin 9965 -> 9934 bytes .../guitar-tabs/string-variations.gp | Bin 9355 -> 9357 bytes .../layout/horizontal-layout-5to8.gp | Bin 16665 -> 16694 bytes .../visual-tests/layout/horizontal-layout.gp | Bin 16665 -> 16694 bytes test-data/visual-tests/layout/multi-track.gp | Bin 16665 -> 16720 bytes test-data/visual-tests/layout/multi-voice.gp | Bin 9301 -> 9325 bytes .../layout/page-layout-5barsperrow.gp | Bin 16665 -> 16694 bytes .../visual-tests/layout/page-layout-5to8.gp | Bin 16665 -> 16694 bytes test-data/visual-tests/layout/page-layout.gp | Bin 16665 -> 16694 bytes .../music-notation/accidentals.gp | Bin 9142 -> 9154 bytes .../music-notation/notes-rests-beams.gp | Bin 10156 -> 10368 bytes .../music-notation/notes-rests-beams.png | Bin 70962 -> 70674 bytes .../music-notation/time-signatures.gp | Bin 8685 -> 8534 bytes .../visual-tests/special-notes/dead-notes.gp | Bin 8989 -> 9011 bytes .../visual-tests/special-notes/ghost-notes.gp | Bin 8937 -> 8959 bytes .../visual-tests/special-notes/grace-notes.gp | Bin 8986 -> 9007 bytes .../visual-tests/special-notes/tied-notes.gp | Bin 9203 -> 9150 bytes .../special-tracks/grand-staff.gp | Bin 9715 -> 9719 bytes .../special-tracks/grand-staff.png | Bin 79548 -> 77934 bytes test/importer/GpxImporter.test.ts | 40 +++++++++--------- test/index.ts | 3 +- test/visualTests/VisualTestHelper.ts | 12 ++++-- 49 files changed, 108 insertions(+), 61 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 697104e85..366211dfd 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -486,13 +486,21 @@ export class GpifWriter { } private writeTransposedPitch(properties: XmlNode, note: Note) { - let parts = Tuning.getTextPartsForTuning(note.displayValueWithoutBend, 0); - this.writePitch(properties, "TransposedPitch", parts[0], parts[1], note.accidentalMode) + if (note.isPercussion) { + this.writePitch(properties, "ConcertPitch", "C", "-1", NoteAccidentalMode.Default); + } else { + let parts = Tuning.getTextPartsForTuning(note.displayValueWithoutBend, 0); + this.writePitch(properties, "TransposedPitch", parts[0], parts[1], note.accidentalMode) + } } private writeConcertPitch(properties: XmlNode, note: Note) { - let parts = Tuning.getTextPartsForTuning(note.realValue, 0); - this.writePitch(properties, "ConcertPitch", parts[0], parts[1], note.accidentalMode) + if (note.isPercussion) { + this.writePitch(properties, "ConcertPitch", "C", "-1", NoteAccidentalMode.Default); + } else { + let parts = Tuning.getTextPartsForTuning(note.realValue, 0); + this.writePitch(properties, "ConcertPitch", parts[0], parts[1], note.accidentalMode) + } } private writePitch(properties: XmlNode, propertyName: string, step: string, octave: string, accidental: NoteAccidentalMode) { @@ -1071,7 +1079,7 @@ export class GpifWriter { soundAutomation.ratioPosition ); - if(isTrackSound) { + if (isTrackSound) { trackSoundWritten = true; } } @@ -1114,7 +1122,11 @@ export class GpifWriter { this.writeSimplePropertyNode(properties, 'CapoFret', 'Fret', staff.capo.toString()); this.writeSimplePropertyNode(properties, 'FretCount', 'Fret', "24"); - const tuningProperty = this.writeSimplePropertyNode(properties, 'Tuning', 'Pitches', staff.tuning.slice().reverse().join(' ')); + const tuningProperty = properties.addElement('Property'); + tuningProperty.attributes.set('name', 'Tuning'); + tuningProperty.addElement('Pitches').innerText = staff.tuning.slice().reverse().join(' '); + tuningProperty.addElement('Label').setCData(staff.tuningName); + tuningProperty.addElement('LabelVisible').innerText = staff.tuningName ? "true" : "false"; tuningProperty.addElement('Flat'); switch (staff.tuning.length) { @@ -1163,8 +1175,6 @@ export class GpifWriter { tuningProperty.addElement('Instrument').innerText = 'Guitar'; break; } - tuningProperty.addElement('Label').setCData(staff.tuningName ?? ""); - tuningProperty.addElement('LabelVisible').innerText = staff.tuningName ? "true" : "false"; this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); this.writeSimplePropertyNode(properties, 'PartialCapoStringFlags', 'Bitset', staff.tuning.map(_ => '0').join('')); @@ -1325,7 +1335,7 @@ export class GpifWriter { const articulationNode = currentArticulations.addElement('Articulation'); articulationNode.addElement('Name').innerText = currentElementName + ' ' + currentArticulations.childNodes.length; articulationNode.addElement('StaffLine').innerText = articulation.staffLine.toString(); - articulationNode.addElement('NoteHeads').innerText = [ + articulationNode.addElement('Noteheads').innerText = [ this.mapMusicSymbol(articulation.noteHeadDefault), this.mapMusicSymbol(articulation.noteHeadHalf), this.mapMusicSymbol(articulation.noteHeadWhole) diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 0199b273c..0a521faff 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -45,6 +45,7 @@ import { MusicFontSymbol } from '@src/model/MusicFontSymbol'; import { TextBaseline } from '@src/platform/ICanvas'; import { BeatCloner } from '@src/generated/model/BeatCloner'; import { NoteCloner } from '@src/generated/model/NoteCloner'; +import { Logger } from '@src/alphatab'; /** * This structure represents a duration within a gpif @@ -522,7 +523,8 @@ export class GpifParser { } private parseElement(track: Track, node: XmlNode) { - const type = node.findChildElement('Type')!.innerText; + const typeElement = node.findChildElement('Type'); + const type = typeElement ? typeElement.innerText : ""; for (let c of node.childNodes) { if (c.nodeType === XmlNodeType.Element) { switch (c.localName) { @@ -602,13 +604,6 @@ export class GpifParser { articulation.noteHeadWhole = articulation.noteHeadDefault; } - switch (noteHeadsTxt.length) { - case 1: - case 2: - case 3: - break; - } - break; case 'StaffLine': if (txt.length > 0) { @@ -695,6 +690,7 @@ export class GpifParser { case 'noteheadHeavyXHat': return MusicFontSymbol.NoteheadHeavyXHat; default: + Logger.warning('GPIF', 'Unknown notehead symbol', txt); return MusicFontSymbol.None; } } @@ -743,15 +739,28 @@ export class GpifParser { let propertyName: string = node.getAttribute('name'); switch (propertyName) { case 'Tuning': - let tuningParts: string[] = node.findChildElement('Pitches')!.innerText.split(' '); - let tuning = new Array(tuningParts.length); - for (let i: number = 0; i < tuning.length; i++) { - tuning[tuning.length - 1 - i] = parseInt(tuningParts[i]); + for (let c of node.childNodes) { + if (c.nodeType === XmlNodeType.Element) { + switch (c.localName) { + case 'Pitches': + let tuningParts: string[] = node.findChildElement('Pitches')!.innerText.split(' '); + let tuning = new Array(tuningParts.length); + for (let i: number = 0; i < tuning.length; i++) { + tuning[tuning.length - 1 - i] = parseInt(tuningParts[i]); + } + staff.tuning = tuning; + break; + case 'Label': + staff.tuningName = c.innerText; + break; + } + } } - staff.tuning = tuning; + if (!staff.isPercussion) { staff.showTablature = true; } + break; case 'DiagramCollection': case 'ChordCollection': diff --git a/src/midi/MidiFileGenerator.ts b/src/midi/MidiFileGenerator.ts index ad199fb35..1390f680f 100644 --- a/src/midi/MidiFileGenerator.ts +++ b/src/midi/MidiFileGenerator.ts @@ -63,6 +63,7 @@ export class MidiFileGenerator { private _handler: IMidiFileHandler; private _currentTempo: number = 0; private _currentBarRepeatLookup: BeatTickLookup | null = null; + private _programsPerChannel: Map = new Map(); /** * Gets a lookup object which can be used to quickly find beats and bars @@ -134,6 +135,13 @@ export class MidiFileGenerator { } } + private addProgramChange(track:Track, tick:number, channel:number, program: number) { + if(!this._programsPerChannel.has(channel) || this._programsPerChannel.get(channel) !== program) { + this._handler.addProgramChange(track.index, tick, channel, program); + this._programsPerChannel.set(channel, program); + } + } + private generateChannel(track: Track, channel: number, playbackInfo: PlaybackInformation): void { let volume: number = MidiFileGenerator.toChannelShort(playbackInfo.volume); let balance: number = MidiFileGenerator.toChannelShort(playbackInfo.balance); @@ -154,7 +162,7 @@ export class MidiFileGenerator { ControllerType.DataEntryCoarse, MidiFileGenerator.PitchBendRangeInSemitones ); - this._handler.addProgramChange(track.index, 0, channel, playbackInfo.program); + this.addProgramChange(track, 0, channel, playbackInfo.program); } private static toChannelShort(data: number): number { @@ -1216,14 +1224,14 @@ export class MidiFileGenerator { private generateAutomation(beat: Beat, automation: Automation, startMove: number): void { switch (automation.type) { case AutomationType.Instrument: - this._handler.addProgramChange( - beat.voice.bar.staff.track.index, + this.addProgramChange( + beat.voice.bar.staff.track, beat.playbackStart + startMove, beat.voice.bar.staff.track.playbackInfo.primaryChannel, (automation.value | 0) & 0xff ); - this._handler.addProgramChange( - beat.voice.bar.staff.track.index, + this.addProgramChange( + beat.voice.bar.staff.track, beat.playbackStart + startMove, beat.voice.bar.staff.track.playbackInfo.secondaryChannel, (automation.value | 0) & 0xff diff --git a/src/model/Tuning.ts b/src/model/Tuning.ts index 8af8309b8..e0937bfb2 100644 --- a/src/model/Tuning.ts +++ b/src/model/Tuning.ts @@ -17,7 +17,7 @@ export class Tuning { let octave: number = (tuning / 12) | 0; let note: number = tuning % 12; let notes: string[] = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']; - return [notes[note], (octave - octaveShift).toString()]; + return [notes[note], (octave + octaveShift).toString()]; } /** diff --git a/src/rendering/effects/DynamicsEffectInfo.ts b/src/rendering/effects/DynamicsEffectInfo.ts index 7526f114b..50dfe0d15 100644 --- a/src/rendering/effects/DynamicsEffectInfo.ts +++ b/src/rendering/effects/DynamicsEffectInfo.ts @@ -6,6 +6,7 @@ import { EffectGlyph } from '@src/rendering/glyphs/EffectGlyph'; import { EffectBarRendererInfo } from '@src/rendering/EffectBarRendererInfo'; import { Settings } from '@src/Settings'; import { NotationElement } from '@src/NotationSettings'; +import { GraceType } from '@src/model/GraceType'; export class DynamicsEffectInfo extends EffectBarRendererInfo { public get notationElement(): NotationElement { @@ -29,12 +30,15 @@ export class DynamicsEffectInfo extends EffectBarRendererInfo { } private internalShouldCreateGlyph(beat: Beat): boolean { - if (beat.voice.bar.staff.track.score.stylesheet.hideDynamics || beat.isEmpty || beat.voice.isEmpty) { + if (beat.voice.bar.staff.track.score.stylesheet.hideDynamics || beat.isEmpty || beat.voice.isEmpty || beat.isRest || beat.graceType !== GraceType.None) { return false; } + + let previousBeat = this.getPreviousDynamicsBeat(beat); + let show: boolean = - (beat.voice.index === 0 && beat.index === 0 && beat.voice.bar.index === 0) || - (!!beat.previousBeat && beat.dynamics !== beat.previousBeat.dynamics); + (beat.voice.index === 0 && !previousBeat) || + (beat.dynamics !== previousBeat?.dynamics); // ensure we do not show duplicate dynamics if (show && beat.voice.index > 0) { for (let voice of beat.voice.bar.voices) { @@ -52,6 +56,16 @@ export class DynamicsEffectInfo extends EffectBarRendererInfo { } return show; } + private getPreviousDynamicsBeat(beat: Beat) { + let previousBeat = beat.previousBeat; + while (previousBeat != null) { + if (!previousBeat.isRest && previousBeat.graceType === GraceType.None) { + return previousBeat; + } + previousBeat = previousBeat.previousBeat; + } + return null; + } public createNewGlyph(renderer: BarRendererBase, beat: Beat): EffectGlyph { return new DynamicsGlyph(0, 0, beat.dynamics); diff --git a/src/rendering/layout/ScoreLayout.ts b/src/rendering/layout/ScoreLayout.ts index 44c490ef7..18ffe56f0 100644 --- a/src/rendering/layout/ScoreLayout.ts +++ b/src/rendering/layout/ScoreLayout.ts @@ -124,7 +124,7 @@ export abstract class ScoreLayout { let staffWithTuning: Staff | null = null; for (let track of this.renderer.tracks!) { for (let staff of track.staves) { - if (!staff.isPercussion && staff.isStringed && staff.tuning.length > 0) { + if (!staff.isPercussion && staff.isStringed && staff.tuning.length > 0 && staff.showTablature) { staffWithTuning = staff; break; } @@ -135,10 +135,13 @@ export abstract class ScoreLayout { } // tuning info if (staffWithTuning) { - let tuning: Tuning | null = Tuning.findTuning(staffWithTuning.tuning); - if (!tuning) { - tuning = new Tuning('', staffWithTuning.tuning, false); + let tuning: Tuning; + if (staffWithTuning.tuningName) { + tuning = new Tuning(staffWithTuning.tuningName, staffWithTuning.tuning, false); + } else { + tuning = Tuning.findTuning(staffWithTuning.tuning) ?? new Tuning('', staffWithTuning.tuning, false); } + this.tuningGlyph = new TuningGlyph(0, 0, this.scale, res, tuning); } } diff --git a/test-data/visual-tests/effects-and-annotations/brush.gp b/test-data/visual-tests/effects-and-annotations/brush.gp index 400af2b1cd99f8388c130b1d09ba42ccf8f79f5a..43891b0ce32ff9aa29ad601b0dca507f3b6dda01 100644 GIT binary patch delta 8133 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 delta 8096 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 uY+um|003k=000sI00000000000094i^A(fLB0d2ClMEvo1~wr80000pE084s diff --git a/test-data/visual-tests/effects-and-annotations/chords.gp b/test-data/visual-tests/effects-and-annotations/chords.gp index 768590da348a049c026d68d1b90a859e2153180b..d7f3b759a5a8d69deeb84c9acc297450db66e410 100644 GIT binary patch delta 9176 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 diff --git a/test-data/visual-tests/effects-and-annotations/dynamics.gp b/test-data/visual-tests/effects-and-annotations/dynamics.gp index 37758724ad12de5b419a7b424b71dd8f06f70efc..9a61d06c7dfddd293ee566123e1945cb7095ebd2 100644 GIT binary patch delta 7892 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 delta 7895 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 B8fO3i diff --git a/test-data/visual-tests/effects-and-annotations/fade-in.gp b/test-data/visual-tests/effects-and-annotations/fade-in.gp index 801a913eeb4b845792f97204dc82e863c49baece..176b6c3e64d4372db46f06280a3837c25e80c2db 100644 GIT binary patch delta 8037 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 delta 8071 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 L83ynl00000nPxIK delta 8001 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 DEsScl diff --git a/test-data/visual-tests/effects-and-annotations/palm-mute.gp b/test-data/visual-tests/effects-and-annotations/palm-mute.gp index 3a81da985ad4eb9f377c93bcd17ed0dcbdaf31c4..39046cdb3ff7cb1174141948643b138cb124b5c5 100644 GIT binary patch delta 8021 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 Xff5#zFd{wyl#_2F8V1TB00000(qMPg delta 7986 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 diff --git a/test-data/visual-tests/effects-and-annotations/pick-stroke.gp b/test-data/visual-tests/effects-and-annotations/pick-stroke.gp index 47af0594ac21a8330078efec8265a39432254581..ae86ddbad3e8e441847297d845ff7ec1dcd28d46 100644 GIT binary patch delta 8079 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 delta 8010 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 M0RRB|AOHXW0I*nOA^-pY diff --git a/test-data/visual-tests/effects-and-annotations/slides.gp b/test-data/visual-tests/effects-and-annotations/slides.gp index dc66d41d0528a6a121577544832111365d57f669..d83a41581f6a552d8933d3a47deb9e115fd3de6e 100644 GIT binary patch delta 8142 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 delta 8105 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 diff --git a/test-data/visual-tests/effects-and-annotations/tempo.gp b/test-data/visual-tests/effects-and-annotations/tempo.gp index aa13f8c325280bd7172f794f33d67d220460d2f7..e441a69bdf64c5560db8a0a879ba320d167f3960 100644 GIT binary patch delta 7716 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 delta 7920 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 X1qJ{B000L72LQ(b002=T00000JNi!& diff --git a/test-data/visual-tests/effects-and-annotations/trill.gp b/test-data/visual-tests/effects-and-annotations/trill.gp index 4f64314126b4097b98f2047a095be51358aff49e..97efeecef4a72c3b33ba8b2cfde209c743ac336f 100644 GIT binary patch delta 8010 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 CKPn;s diff --git a/test-data/visual-tests/effects-and-annotations/vibrato.gp b/test-data/visual-tests/effects-and-annotations/vibrato.gp index 96aee901ec803bbf02d9f5ac9e9ab98a3c749721..f08dc1a1d9ab30d35dd884a859d04be84768df6d 100644 GIT binary patch delta 8110 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 diff --git a/test-data/visual-tests/general/alternate-endings.gp b/test-data/visual-tests/general/alternate-endings.gp index 8c3a90c9a96fdacd0f2aa065ff64c4166597d60e..cbacf783b431cbecf7f0cb4188b0b58686a1c003 100644 GIT binary patch delta 8068 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 diff --git a/test-data/visual-tests/general/song-details.gp b/test-data/visual-tests/general/song-details.gp index 71da8bfee97bd625c65f6f285defa38b849eaf19..224f282e26181a600144096210f1e0c002cd21b7 100644 GIT binary patch delta 7700 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 O0LK9U0EHg_0002^E6ke! delta 7846 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 E07$ncivR!s diff --git a/test-data/visual-tests/general/tuning.gp b/test-data/visual-tests/general/tuning.gp index 02d6540162353f2ec6f64e9253d8d0b9ce3b6cbb..3620a0471bc08a158a1633a9c2f96ddedc5e7c52 100644 GIT binary patch delta 7970 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 Y|A7$}lRhFo0aBBFA{qvWAOHXW08z(;+5i9m delta 8024 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 delta 9169 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 diff --git a/test-data/visual-tests/guitar-tabs/rhythm.gp b/test-data/visual-tests/guitar-tabs/rhythm.gp index d9366f016ebb7d17e1a9e2e798c76eea4ce62cd0..81e3efe6d7bb44a4e92b84e41bebb7f6a18a7a72 100644 GIT binary patch delta 9094 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 E06sOeWdHyG delta 9100 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 K1`s6x00014kCj9K diff --git a/test-data/visual-tests/guitar-tabs/string-variations.gp b/test-data/visual-tests/guitar-tabs/string-variations.gp index 20f0bb0ef393a798c40fe31edf60b33ffc94f013..09cfbe7eb7614f64abe07aab789f7ebb6bdaebc9 100644 GIT binary patch delta 7421 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 diff --git a/test-data/visual-tests/layout/horizontal-layout-5to8.gp b/test-data/visual-tests/layout/horizontal-layout-5to8.gp index be7d700f6860efddd5878d347a425f8cf755e4e3..1287f350959e6249c886956b93632e84c2fbb9a7 100644 GIT binary patch delta 14725 zcmZ8{V{l+iv~4i4Cbn%%Y}?7iwr!o*HYT=h+qUgYY|Om*?ydKJyzZ)9UA=a##yMTJ zd-cu;1Z@cfjn@TqD_$YvVL5kJ5kbr(1hbS=&>w+Hj~Ecan8TMjiw_4dKU^{6%fR9eyIRXmdQ^ zTy@h+bl8sC{_#F&hgMAHMzfj=skDi(k~?yp?ja%4dRTgRaTrwF>#489<@zyNPdI%0 z5qYR8&`!N0q|S{s>PP9xFY6P>IrCY+Nh+5Z8+s}7dOmdXv?#)H{btzQbHMqMRgUXr zcf}W_%<%*iI`9!~yR0I4lZ6Vz77ms6+VTgja;Dt0Zn^E16sDJLs$N+5VoURkVoowTqu{;xQKs_P+KhJX5wr zSsI+F=leN4GBTBLT30n>V${)F{lq9{N6V6+>zPJe=cFJea*y8?9dOu z{ON$axprIKwDZ{uBU_IQr0O~H+_}suA=RE&>~K8eWHFk0(K6|Ik#G*xt=qErZYNgA zWQy29ey|d|Jp-4>F6kvM`C6rk#K*K!-bI=7EScrS7%F$SF7HQA z&3p%5WM+9bu^Z*NkVEBFlB)5K-*i?k235NKSQp&yy8&T?b)st`Pz52#ADqHDIP$!B z5aj~!AhDq5bCl16@k3j9AZLYyM{X-I2Z-xIX@AIIRXFk(K?pWtC4z>^B{_26^x}Y` z(wf`_DrKX$+NZ88V+V#c8D7NTFVI^R8b+R!N~8LdQ3dyXU6q-8`>N6JswhE#QKBem z9hoK)v2BvRl-~2vWKz$i5X%DJRq#&nEdR&VJ^bu&I($SH`#xK+(rA}QU@a^KlLhVE zl=0Xa&M+g);9#^A+CljZ9W)W5hBC0)DTo7QC;TE-;j&DAr-9@zo$1R#z|LbQ=w^7M zq~m-4)%$*_DK7>Ou08)f9i;ActlTF(jEZ@c zmfcF!5(j}*PhY%Vj{5h~%Yxq%jE6AANj)w+qD1+hz?;u(QSToPVWabkozK9wK(Ejn z=AXm7S|~rpqM=!o_t3F#Yc88TEvYY}SZth&U^x3fr3A)xx|idO7-x_4xn}6;hWY|{ z|HiyG@F8vo^qb76H{z+oe5n|}G4_7mKe<*nl@W2zc=|e`)_uO zQ47UDd$|XPSx6)EN%@46sZub?g@^UG=ybazCY;xNI87M!r=sF=o1-hB+s<8zxyddk zG^JM;-QDGjQ|c|sR+2@;O!Rrt!GTkjOWk_(sg$SL^;x}Uy{8`}K>;anm(TR77Pb~*oB#v$EU-;Yr9 z`DHz|xBhM3cn#vi_5*hu1L+ZC`1T_m{ey{9>kv^%xQ~4AYb5cYi<3BJ<@pk-`VE`}gm_exy=`M$dIvC$s8u zA;X}r>tg>^2{LjQROJ+O%Z$}R@`LqUKvkU{k!C<1GF9x(gaj>JibzX1ZdDnSnjn0@ z{0{zlTJ+~q3>PQo%9Ggr2xZY2{C0BQ|zO4&Kdf!_j{n z%7FZYM$nbJyV}QR?=P(ssj7@b$3l;eU+JXWb#&>5TcoAdO0CjM=^+X`O?~QA{nj zmyZhVIEc?nL%-WYey9EFri}9H-+k82y9|)${+l-ht=_rO?EX>%ZC^*ib1d7~tG;oV zvT;5??$)R_$JBo6HTdmBYAGijtztP)KyR*MI7ddCRRnX`9ZvFt>bJ<>;Tlk$oue~m znu5r`f!DCWh@u%%)=Ps7=@3jINkT3dTuYh!scCA|+XOHRt6qO#EZz8`diKVrGSi$1 zg63-aRn)v|vn=YoHJw548JF7P#Y@(mL%4j%$vuhEX0weufy@w+504+DN z30=PMzWmMJUc%h4X(&R7rN0p^AK+ZZVE%)eQuDh zlJO<=B$4-GSJq|VTeBna`Qej_YEDC*zTimH>I~<-M^>`9#3UI#2CwtE0C7bT`@>=( zwR#B<$9t+(KKT0k+aqjUNZ21r@Nh?rBzraQ;!wTTkGs%Pa>od?{=UkjF>H^@+=;;;PYK1`;lq~5_DH8qBZvxuG9va$NZ;_^N&Q{mp#3mA=cMU z|GDWY{z%_Q*bXk{i?K}#@4cX@fTuh@ob;Qnu;v4~_3zfxudGPc6IaSUKtM%FKFCi% zuG?FzHQ-+FEAQ^Jjv~Pq z?eue3il-RF`)z!Tt_yPiGCdk`B`DLF@P1V8>~{rt+aw#Zfmy`(5@X^~z({V5VUr`* zuHq8DzT&QY1(SpQa!%QH~ByT&Z2V<-lMI^~?U&tpvBR;yuL zv1TSL*yZWt?NIiefE!cNrT3vP%TGcawvfqC{Ck|Opa6bP!HfGGY-6uxuIp=8d+*Pz zmTpU$Y)`Qd;wY8vk8GtxKv}yY?&i;DLlJ_!toZvjQz)xhwoq(qCWy}pWx!0H4=k^3 zlW{2A(XU_>sF#=4UB3^n4F>FW4dYd|5jcC@RV1?pt5*uDbpxJ^){p|2kxLC3uH&h@ zfT3=59-JGTujAy0maEVNKZ7M)$^BORV#=D+I23l(a$-D*4-g7{fNGI>0OS-aJC3R= z#XV*)lls*6IcPN6W*IjoJ1O&ur0K9764XRLke+r)rQ~FE{Bo|vQ!~O4lM1wklCC&A z+D97l*!g`Cf$)|0c4%M(H!JTY$kmIA<+$r-oG*vQ5~I2O*p40VY@4`__P812XC^!g zP%nJe;@ZJcEASW%v=H=nApIopLR|K1w1$Vg9K?DrOdo;48I;X6@jK}Bj9V~oxR3r- z{Yw;_gH={#!ZIFPUG3}nHJc_*9QK3|0Gd)K*@UoaJ&7vL<| ze+~IafAdkZ}e`|RoHQtXuMy*jNb5#JqfgOJ&RHK%xE3e-At02-finf%AHS(WsYp+ zagLIdv)rKHv+E!YEC?L=d~j zATOyif2yXOwhH5Aw8na|sGI3^vuqhU;ke%hLQqm5-oCy^n*GB51aDksdCi|Q6VuXb z&mv{yMr+u%;bn}Z-o0r$#9F3C#VD@((N;A#9tA;5i^!&9Tc);uu}Q8de1xUI=GQ+a z^ejgN=!9pSv2x9rFxhR^9=Isyxrus};q$Yaw!74=j6n=mB}~3IMbb9}Z>h7!@;n-z zC9QWt+swmQtU;YBDfMRaMh>s3qZWlHF?lMP}2y6V#;U z_lgqE!=sUcpysAXd>`bNc3^7l#6AaCn7*_OltbI%HA8&QXX>xvw3ip0Ftgf2!a`n7 zrrDLq7u`#X32Xc#Td0PB>;>h`lWS_)m7f5zQGnGI*g$BH_G2jRxB*fAke?x!P9)05 zzY{kIp5dY_M`+j~RQK3SXQgt&%8lkR83Cb|2K>I+*>h=KTJCk2Q@4>%l{Rs~lvw=@ zNTnL?)*4W5b1UJeL#?Qg6+jpnkyZkEk?q4Js}%YThDNxWXa zR=Y+ok;(W8D{X2s1a{z&>P_9PyvR>vCyRQ9pO=cl4f;8 z_Q0187B9IAfd-c)+BC~w=la3b^(mR}^Ts+`_S7E72+m(jgWFRHV4ls0b3edH67hsh9l1y`772PT$`&2kh&H$>F~yh5 zk05OwReGK50E*l{e%as^FkcTZgUTGWnie6&)ese{cxOH`kaN#I~T@2#2HR&FyyKiuIOmm%iEuezdtmWU+;=&UrMqonGh zvCmsJOk}e0RNo50$UBEHG0z@z{!AetPN(M*J~Z3=Da@Fmk8xjbY20;*_-SB+>^q4x zO7f|1W0O~n5!YjgV;?*@BeLERzIJLQ>FGrf046;IYmcgm7qYq4?yBZg`ipjb6&18a43aC%XO`s*#LrED2W{erGUL(y^+fJIWb`0PeVUvgBkI~|Yy(;wA22Yl^s{^Bj zsX1gUdO8K@aYFc1XVWlFgiGbk38^LkAX#LB6r4KFDqK)hhs+s@utoE}ZjC>tvl?(I zbDg=s9}8ABF?i0%coRr(`{_@knryvFX}!?Ed2nd1{SMJL>~X6nE?*ddMr7oV9{wCU71vM9`**nW5Dn_Zexp6k#m<#5dI)gqBZ#ZvBt)qJ zx|$XR257oJbGC~B3b(%3A~lSY6_w1lmq+)`?gCP<>)5TUfWKN2nXgbk(3@;3{7+6o zx&l8HTHQBcB?$7wNC)*3^^)Z%C?f~_OKQXI)<3gU_`SXvx~rHbAuxDQ^79{gzfGWU zuX(;{1)xqo52ZkR9Sj^BwUdaRz-lTN__34EiON=#3_M5zeTpBVj>6XA;`YU1_;mQk z7Dai5^BLtPV}-#5j!0SKY0YdClNF9EZ{bd)UIY;nlLIZWHT=h_e)u0Qg56w{B-K6m zxRj(5g|`nxq@o+i{UmOM!`Vl8vj({6P>0%t)>cZ-F-0woJ?($NTQM)p%Va@7#Lz%M z6lK7_p@BdrouZ*OmZ3320=RIRbc+#-_MJPDYObt`2`prG{8Ih{%*!~IY7i48WQ;$; zUbvMkE;FBJ>dafCKvb+GR^x4OYf~RsOTf*`Mu|mupU$ozLr=5DCBa-#^~9Azu%ktd z@kEbaza28*^m6y3CEbl`Ck8fzASj?B8BaN#GyF0rV%9U{AW~ze01#d)C(H7AXqieq z5~~0L^3bQ){LJy7ecm7NUgO>vj4YVX(pN?=GX7}>kRykr=Xk_>7onjtO!XX}38;Fy zYr#qdopGUGZC!7^7aQr2Dg!K{yICru@6G`MXB6I2f>W&&=~SOF=JjBQtLs75aYpL{ zXn`|6$Xi;dm#f29KtLH5%CV*lH}^*uG!cSmpfcor6}c#vTJhMVeGz{BtyZ*4x9h^Q z+Ut{1+4D+UIBdq@tZwea$Wq~fO`@7Q#~kesCOxX}`^(7qeQ6LG@%r)zqy5jEw^eU6 z9$wYwxHOu$iH@?72o{le7e3iKj|$`4L|hv1T%hxHC?>xXi zKZf9^GoNy>10*k4$+vOBuM^a63C4bc&h`%C-_eZF^JADr^;z0p&Zq4PAj1~WH|V-a z{ZT2#H@&J>z+5yJzV3#>iN*n< zKAIX-@&=i+l?prdTQI#;Qj=e{8YT^72oY1|rAH!1N|c26qU3~$!hfSqHT5i5e8vg` zz7dl2f!`CN-}C#BA@f{oE%fLP2zKAr;uFsLTXHOg0tEtUSr`9~J2l6?Rzt zr;Si>JSSeHqLkFWDI3vNWj04$>|PmZ-DE5YY-lhN_S6ibo%$U_c4lKx?gkA^^Uq~$ z`zT21{q03K^-Qn9Izb_6W4>M;A-0Na|Mb5>S(&>$5eh}pMz(x!_Wk3te3ClOUyy%> zvR;}|CkAE4Es2^xN5Ct$v;1tB3{-_kHB7SxIMveY&%8H1?#nMNA(B}i1+W;_>028< zLcrM+bp>s;fTHJw3gYTG)>rRHmja6c2}f<8M?*u1P)v?0c8P|eKC#}U`fyQ{)?85` z`99JiD8S-hV1?Z z>^_s&UDLnu%>F6#a!V5;GgG41Cz)pQ>@=L~B42^=RbURHLslpx%}PGUn&gVDkD;{p zS!m^GZX3%6crQK=X9RZgfvU@FKu2u#aZ1ug_fP#dk)d3;!NK;OJFOWnpTj@;(;PJ} z9S1D};U|Fb{SbwJqO^Y#{`=OR0c{|#+&aCSBBrBT?CgqrS>sk?cY5*9!0B$MxHfbb z(%N%($fAAX3A_xuWnS$|dlFo$Pd3w2p1b!1TW0g{Tx_j_JD5L>+2c#kFE5mpxWhg; zb*}HYO+T|B#1y=B9T{b_4HEO&r%Ft!0*uOjo8HYAiffgoG18Pu>RFfTh=6>5HQ4|s z5#a&k!e11XPLWqK3UBo|WtH_|M4g{pS2hqeRtS2PGzZOA*{d5GvyBg0JhjaaTAO># z6gCm9xNc+5J(UgToh&6&y4~=R>>dx_Jb&n}^~64cDkIH@Ky(yGtGFy7=xP;&zV7^H z+qarap-Mbx6NnrPn{S-i#s^%l?L6Jn+BneVc25*ATx;w)b+&2emhyg$OA*TA`*!AN zfR65N|GRc5HOWO%H=5o8fSLU$oB z0qGK5`Gs@f8!-2sN3Al;*Jb=0*H2?F7``cWeHBI((gq z1LPfDnQi}0E43H#;$KAjKy^&V6sYXVEe-cp=aiQ#8d`2;bO)695+YlFmv-lrOUIPj zy?#7}InzSlV=%X|O&1;uZ$ho<$NUEjZg+l{Q;~mW($_-wx6he0hCpRD()QcjKf_As zMb$*uw#zji;~EU`Pt|#y>)0%%Ox*vgSP`Fp+&=gM_)9^tEy< z59@7#R~54K7R+&4Nnhdb#2c5|iv)Cf=C~Vw1Dvj327Y@nd!dqCrSG_V7_C{1-<^*v zSsE`#(Fosi<%5!QcB2%uX+8Bh*>%7L^1egNNeqcA#4^vuPbsT}Wt4GJ`#Od3IV;)K z*WMiN;t}TOm?G`B> zH;b$hUVA4Xh^8M}nnCxLkvp3;m&6M}bXU$28zMt`mp4NpD=oR6^8GzzR~Hy{4ps7O^VBFbgG~b z(+lh|$0NVEF~&Zg+u@xr-V0-rzF-9H5J2m>&Cy~tqG1RLeTR)Q&??f>fR+hu(3t$O z;nae4A}@nqfo0Vhp>2J^Yiz%i`VL`!x&K8=<_@DNi;p2Tgv_lR!g&H8+dkiZB2}a|=UEOYkdV@`1UEPo zJsJcz?D_QVgs=?jq9KppP1XIT2~NCWZ*fRYe&>Nbv|&t!kAhF2>rpr`FlpEmo!>FJ zcVErsU1OMY7_|8!;G6h9X{tok9-~py(f317!3neZbdsFIm(Yi0EhdVqY^zn%u&KN& ztF3aLw65WA`LF$EFjWw3#FzL@-aBMvKwmE{A*5 zR`IwaNxw9TDr~gm)&6!KP`b^i(ew+9HMXMX2k(@h^d=@=Pe>{b-MRdk65PJ;rX)wQ z6DB;t#Zk`^W~QEAVy0rAurlU~HLjX+jn?J@_kne@`1Q+t2;K@XpjG|(-i%k>@?q=3 zX30j3TF|DpnR=U{C1+Kqh1zfxRoOg|Rw4>KBjo{1~e0 z({}o$*ONDn2(lacYxLc!*QmxPO)>~4R*%}rZm-P#`XG`%_ zqgi|6?ifPsyB#~gd68o8U;<(@;mdHlIl*h4PJ5?J%JJi}6Xx`sN26ko7uymJorudB z1v1B$`o2oDW{hJopBjVVdx-AUR3e_RIrgetOLYjVjpJqqikG=(g0i)dv9OF?q<2C} z?%bfDRF=)mywhf^eU;&#*Oe)UrnxFJLq2uC2kl=A8Id(W{iv?Aa{X;@T|s5&UPh+f z%e5ALraYz=tCG(A&mNe=m-1sMOX6QQS3)aYblx4muYA`y-LHExPCf<0K?(Mz;ilWJ z;r}L=dm=-wd1>+6@S7|5B&2=`T2vG;!Ko4qf7R9TazuQg%1DdlnC(J3YY9CY?!@qV zIMii5$Uq(g5}WZ8J?GdDs7O$7j8D-&i!%y-8t@1dgZK?f5{W)ebVu9`WK~I}&n7C9 zN1N@64_H8~qpXaf28IeJks$31*Jy0C3@QkR;Ag&7A)p%k{7E=4D-S$&`<6WT+Ai7yr3(aSh4NV~l8g zJEkgwTV#fcWhF7;S-43Zf$&iBVu|eW#%hw8qQEOcLq(kSU^7LV0-+`R%>y)e@nbq; zCA%wNmH|Fet}H?;G-x7?&Zn7xHz=h2u;HmeT0W)LwBFXlMpNq9b1Mek+hVv6bGdvu zcN8B7#G1dKg>9P@n$Z3jDcIHIaA)jwvTm=%P|3XO(`pYr|Hn@oz9@`~yHU8DVxp@! z^`3|QAal-={SRx5=|vhYzA-$$U79((pNaHPRSJ*u;bk)?RFb~&$_2G$tqaDZS5NC+TzBUoWRqGi%USQX|<-Rr4;=Xv?SBqc7X}Gg9 z6Sd>e&V)<>{{tfcdA4#J{X}&|Cp*cBn!>vU`>Zket5`9ti0_JyccKb9bqO0Mx#U2^!<&WlB}p%Y~Qhj zEu#J&EJID1*Ro84aljaL>I;EhRvJl|cEi$RQoz9IrsP(G>5ReZnBaNc9+EE*A+7rs zvc|0ZAl@OuQ(6$bhpq#zFL+OroAzoSC6A#u7Zh~Z@M8bINAe-K|5wj!P5h71Z|Bf% zaqjoQZJUs?9H?vhQ_o!9@7BGC0ep9TP^&q$F+FhRb`U3M3JoPCQVG>1#ZnMwr3SEH z3ZuLnc^{Wx9uyB0n2taK!+GgUBSSlJOWxJwHN_S5OTmfc0r0)9 z0o%f=svF9I5>2jDkTxp33~CJiptedEzl`*-0F6YHExHvEdJ~*?^PUmFH2(yEk$O`3JU-;+w?dmy97lg}_=A_9F{Td6D2{uinuVmhgho zwj9Uc)qjF170xR|tTlmdwIP~c+GY+2-Cv($lH@Idy?gds$WG9nM#q>O%pJ2;<3l^7 z$L`Ft6qvlNm==m~)l$6eXvMX3#wXl){Z$~O`$J!IJ$rWIm-NbB5U9^hN{2j6Ffvv3!A3@rr9bF$3^pW%ZxnmyGX8lu`&p zfzP^bX@br=YnuFx9qS*^XWGynJ5`+cd*oW&<2SLbXVIPYCTIFVpEge}*W>uvryak^ zjELoGnZZNKREo^69)GwFD-Qx`Zsd_fF8M7{=FCbEuXcG_`PY}+xco>GP24whgH~Z- zy*$0yOk&_7^&GHGIG#}%Y`n83miB9s=f?p}=We+?d@Lj_I;h28=7uouxZrL?6OmU4B^|IKbc04P_ zDix4}7!c#qQLU>y_8Py;)v^4$;zy}l6vi~>z*DBS(GR??w-hk#NBEtR>XX!a-kf{l{(p0d4A$EcUHK%S|HhaL5vWQKi;N&W6- z)OwENI2vUwpcW0}IfOhGR;MTiRP9A$p#2egtM;4s|FZB>l0!{7{BtjT+)XDkS7(7J zRhe{I)(;%uWxjsB;|u0G46o=g-tzDb-klm$3@%QVpU&*nOPw`zfFjMqM`KD?-@;l& zVtzAE#Nfb#+C1!QJPH3cmY3~5x|-<+k8}f%q(?)9X!SQ{XZ8ChIS@+IS+vS3hP!}< z{pX+N^ab)XuKs9`)ys7`OalqV2)1z^zctyZgavH2UlCaEVFTeLxT4PeI)rZPWx8iVej!j3KmnP zeK#4px1-KDpU6k|WroLq5p*!$;fvwgR2&0|p1{YZ0AuaU&Fo*PU!b>|fxwq_)BOVi z5Fhk2)vq@WWqr+gK&n4k9PV@H;^s$$%^YQ43`5tMJ^y-{Fk{?|oqdg+B-|mKF!?=% z<<&{*&X(sj>RiqOQ&%u1LR9^WuK0WUndp9`_8^j^jCEYTw1Yl|Gfph1X5IEMS?rQH z4#?p~6!xj*W zy%EmblkX)&?NjCweL`w7d~xHvIO9V@+7K;Tu^t&&ckx<$-)1qKk$LEr42k8PEUu+$?43DO7>v6K6sG1SA$4rks3fwP((h|YHfu`Qku~T^-{eC8zOx+x#2HbN)wMd#^?TdzYNYz55O`;DTf7-2!6CW{Ml6V#qyuVgfTq-&g?GsP=1 zQTh<+UKY5nkwf9`yn$RgpHCA`FIRTYua2Fgg=SldgrXM?&`{(=EHBSvKlg5Pk7MS- zPQ`ZGNg@%`2#mo*a$v)x@4HbF$!aX9s$m728il3JP)xL5;GuT{-eYQFg1L|~f^KoZ zh@f8UEK2G^X8r>^OVkbuX;@EoIx!SQ=UZ1--XMIlUS96ei9IDHG#04$*nI+9)}W*@ zCupV-Qeje(hh5tr2vp(RtP(cR8p!s-B$nIAODV;v?0DO^zkpl6Y{4pX?co+Bu2Oe9 zp)=KtrMV{f3r1hbvtYnnWnm+&JE%(_zv7(b?1!W?|Gue^ zAXH2`Rni@uG=MnTb4ERH43~QhL-?eYqBJu%4}vgHo#<~_6sxV(M~@~fC2mk4LzBo# zb{_tVVnt{Z#Uf0STg-`YJnz_4^cmfKt_566Q>-D>1b-Zy3<+72b4_Ry(ISOknXJfP zvxG=YOxir78A=PE8oUTT!6|ZyUzz7e1>0N&i*kRQGVo8_{3&5&F5V2aL9DEhup*He z%!+N9jlGOx!G>;$v*1#M5YH~E_0IuPt2@pG=A2~#y{J<1W~$6K|2MgCP9@_8NbzcM z450*Jo|%`>i79>3$X^ArXMv3DVkrrwa1I(q#|as*V^eug&AhGw>RRYzb*|%|0rwjX zpS2#yfQN~-Y6FT~9!mBijBehizltA`qTd*`02&oAK@HFhi1IQd2d^nk3<{y_i${#c zCPE8H^M)piaw;Fx7m*DlC5}`I1rw7KNJx{=Q6o5kBJayajAkZ6+e`DFB#XAGoH&-! z4P>(@$V>=ZC00_3VX3IygCvOkUjSf<<1t0PPWIfQj&dlST1;<%HlE-eN&e@@KMf%o z%!5wgPD8R)e%q#kye}UznjJaEG=o3-58h`kAsI-QzSgJ-cPJe=lo$K|eM{NVkw;WL zqst?iN-}xMD*v(Ex2d4-%cqQHSHx$GH~;uI3*fk1?q@LbPXgl#lIZdi#ES}O_X^%? z)ql{jV=2u*HclK58}jv%hm{Jdp=``(dM327ReMke#s4D29O0wcnb7W5yw^+r7JFDO zCl}1jMqq69kL(!n;vaJH5BW!S>R8G!kj)*(h8OAz?@#F||O`7^rHe=9%(Sgd4}<2W{n)2&*VJN26AenQh8j zay7w$ySDx@lzLW`{5bKr!B0W4Bll2F&oD7BKb%V#O@cwF68$18>QGW$7ZLTJ2ydoF z{(-$P$@#QAucpahLkR%vKFzRy3`UxR(`Cqoya7!gt1|rB+5)s+#v)i#0$e}s=w6JP zxq}mCqAC|;Ijd+U*25UHO&T0LS&zZE7BUz*m_{t9Y#P_CGbW1m8*2`(4m~=x>d@Gd zcPvJ9KKu?sI97JqX<7oTq7-#WataBKBsE!2q?!&mHFI>oaRH#R^9d&A(x?n=dfXKL zt^^lRo9U0%MN8Z8Or5`*op8Z}sP{q|P`+~+})k!`-)PBrmw*%=Z?5}+%??2tcT!otmo*p+@y6~cmtbkU=0d9Tg@Zaac$ar2W$z` z0|if2zavRlf7OLSk;>OBQ3m<~weu8&(f6@HI)jrz${o`P&0SN}YMW~*)8;b-QC;!E?>kytyt-y2*rh~fQ zus}m481?V^C#^b3B5tl$`gAH=Snf598EBMdOD5$FG`G56kNsu46n#Snh|_fhKGum0 zMv)sN4?@UrGI-C5#l&6&9@b2j{Wu|K7SAgN%9eYE0_kPH*Bi+&)Hp3zwSH{oH5u3j zZe(s7Mr!cpVY6$j99emXzDture7HFV5&~atH`Z#KXrk%eE#AhB8zr|w2GcBH{M7+6 z4kCeje`f4N0y&RqV?eLGJ!j)uvg-#**%Fn{8$$T7x2iKV6gQj53=c{sVmC6sH)~lQ z?I~i$msM*D7DPf|W-_yz(i2%CXxK*b`EdMl*|&L8O3$Q(!39H%hwbRkJt*6h5o2jh~wd1gj)xB@6uFaxSGtM(L zh7P`iS7#;u7}g6tg4Yg8+ZzuHqvA#=^~owg%6Vdyd$G{|AyCQoZW2loUtU_qR~9i$ zjQD7<3MP`cBJmqL6J*z_fB_ic)_=7|c6| z_=;=PySlz=#KvMw|MiKb*Dq6#qsG{=Lnf)@FeOS) z29B|PcqG7_OQDFU6Q}$r+hOO|6__&z{(pv-as$Z|aCY**# zW0K9-x5vAxnMETvbx5o7+a(ZLmKfBm{9{GEz`l5;VyL+XYsEd3uT%G%hwy|R&qz>A z1cGw3K#}yTNP437U6@yymwtJQz}fp<$7`YfjYfZ36W*UW&QInwP(UZLXE{POQz)6G z5Q19Os;NvIS5+(xuk9&wS%}^tjrp5Y{_`Lor|R!r&99WW$HC0{o*kf@yezf;+i{}C zWQqa3Y)W+L`H)V8*(X`R~Sge#l0PCAXYriJo$0JkAV4YrLCroF_8hu8%Jk_}F2 zXDgEv-{rW|4nBCxE0$axp$4MZ^Y&e#;Ya%L4AOiuZSBp6=~_V*v3g7oX32!xy!M;H zdI4luFPb(q_a_ey&IRDOv#uaQK&A~nDb{V1pPYSFZuY%gGVG)tg7It>!WGfMVQpqI z%|nP+(~fHI!VK%nn_Pgj~?lo#p2RRswoBX?Ol0Ws0*jWxtPV+{rqjq zs=(uE>a>9nE+)$*|0}ibJUzp`j6(MmL~RzM6lxM98@x>bDjxV^y%1^;I|aF(1x>!x z`@M>Q@PUhS)RFe#3Jb)+_Fg~vW#jA?;?#QI>50jpcp9W>YQ6Amj~y@%mh-@mxLpO=V0$U>9opdTf^FCDHwxgj%RaW% z$z@Z1Hx2JI456k*d94>b{;9NrOo()`AkbdI@4K8?Tcg&z-&;X+V{d81ezy2=_TL(( z>m;%a9qMf6*WtaJurFc>-9!cn!a_R^!?Fi%>w?K zSLLIQI$aq~=V`IpO;F3jV+~w#F4^(z=v(mRZ2T^x4{t%hFP2*$Nm9t>_nJ4t;9C3X zll=_T5?lrG$=B{^ZY;RzvO$%s8n0TqO6+sjy+FHd;~I8~D76+$xEZW=Be(FNyV6$J zxZC;u*RP`FUUqZeSHp8pfv2=&-8=$iy6nMb>?Wo<4(@G?zTIC{{CmwP&c?B=@{GG> zjr89pON-LMoX$d!%vbF{GNm?hy(gJiB3=)R6WUAkQVPhrvF&}V?+7J@PEtS q033{@4nclmQUMSUH8EusDFt~&83@S#aHxNE6chwR^B)8P@_zvK3z295 delta 14680 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 delta 14680 zcmZX41B@>`^yS!oW83z;v2EL)d1K=@wr%r`ZQHhO+yD3NZnB$fo7^-#x2I{7wzsEk z4ggLM0FKiIXiMARs=HSGStp65-6$ec`joU%w9>?m9SF+;5{!#qor)dxLxpyosPBR* zX}@rB6J1ix{%aM_OLLP5B#16}sp@AEF9|{#)-_5TscEtY#2&Y0Qx6qTSr27~Y>p<- zcB6gM)vjto0jrIozx1&=({_@h?woagm)XG}*(xUlX!(USqUnPog2$n8Gx8_35#kSz zmCKgjW!n~OL`5v%HWk1|kz)}n%zsHBieJtd^RVto<03p0-Bqf1UgC>dU0R1j?w^Sg z%kRmE+ehoTTHfh$>2Yzp!{@+@GQ+8UaTWNy_or()eepbc;aRXkH`iJ=Aqj2;vRfR1 zqHaePfNQ?J+AEp#>de;;&E~u*yOnxK`dqjwPr>MX7X8uo1zwbT-3LdyTw=*v{7V&m zP^1uOl9ANV^KjTFm(KBru6ysPdE;!>r)T1Ozs|M=XX^Oc@~hq5hk?9Ec3Rn%LY=QG zegm3!Kc65WplEnlnmS9oZ>9%A*68xkdXE|c++j+V(eB#;CMX5me#(a{bKY| ziG~|m1vHt$napKn`7Uf~JJOc;k}CfkzC%#daYAy7`&ssWsyw1O%`0JUl`tEap88Ti z862I{>T~bR1LnmF(nFvWsi>`LcdU1fl$!n2c2gX9URcxfZKj!Jc^c}=5;Kj0f+MF3 zKyj$YizWmy01Ts`y}dsZM(|qok?=!(68YPz;;@Z)_+@+yf-kfSMmm%H<}@q;bhfp5 zAa+6va>s;w@jjTw4$|+0rlTDYrKrD%5SwM&r|M`&*~_Bg|a!nk-U5!;N8!g z^Oy5Mu$<756$WTW@UhVJ2mH=Mb{-Z6lsXE3o^s*xSq5#-ao%;5Al^gd-S88L0CSN^ zdg5Lqh@Tam4cnJlGq;S|qgtN0d#RPEF&Fd#E&slokrcpi_lfuH5uLxY@BssG2X*eB z^Y*G|S&mDH@nkw| zSLd?kTrRJy5mddq7$SN0lZ@s9@^NnM-gwCtDA5h;@M0x;Zp5Q8cYDh#GwxhKx?^?u(eSsvyX5i0fmt7)4H0btZbcr4UUh>9 zF*tVO2aL9IuWGN&Q)iiq8Dhe8eh=>OBOu0+PXyekGH+uc{j`(FJZc&iN?vLNKez%U z92iwLGbku=r1@)UCQatCgTfpxO@ZD&6#S!w%IB_fkcrNWJn>EE1EV(yp`9^xKn3i@ z0L8l_mFmpUKjI`F`^bv`N<0;_EX`+%3cHzDc{i;mo`PD<$cQtxs!tPbd%n?J@cZ}5 zt6#B0JNZ8WJXj)|o=A-x!MYkMW=s`pCsRLhlF<417v*1O+BN<>=~+@azf8`inOX8B z5v^4K4>P_F9(w4e5uIl6?aF@ABWHet-f*}dIixJL6}e*0@gPtDr$1rFQNQ{Divdeo zCWpiHgruk-dMABez>;L(EaRX~SO)nBjf*i5v)dO>Cbd^GLT;ySY>8a@W0h-e2ZpHF zfp(waCd5>;ne3*XlLxkbpbfIOb-#*Bt50Ho4KtP?o)gpsxMI-EfowK{ z=!(<)t$gJ(oF=OT)Y4OD9g(wkUeLmHG!JJdEt4#~%&QZtV0Yo4m3ZxL2N~gr^w4He z1=+X}+RmgU$6!a}gKg&1^afOCGMLcork4tff*dmjP_7~PA%T=5J-c;hpgFmb%-BYQ z5GZ}iZQB4T==Q^3xn4$O@$x{>!ng|A;x1-dWYASDFs9DRWa+x5LUC%izuR_UQ(^P|BH6}R93i)JKY#@4P zV}DN5UE4na6Cb9%21cWv+u_1`e-MOjkK?|e5(JKI)Z_^1#3eUZy+ljCzDT&D{Zk^qr9bG!RNvz z(>8`ftr)F7!3(j7J>MlIo#5R8IFC4$~I@Zc`#mNhUQawf#)T%SA08gx{Wv+mOo zq%(Yi3xrXcu|x|UmIUWs=)?nBOrQL4VUNg$%WZY0rJ(7F=|;S1AXDh_aqQ4WWXF-D z+S?vLJvs0@i{>YxPPr4&yWi!#uhDWzKg)FH)73#@tUO}QWy^)S2fHg6(-HYCkNi== zD#4CT%62In^tyqM(c|(DU+xlMJF;nBvbW-((?YdewZV0%TxV|Lw=ElX=#;tmlQ+K@ zQ7qqtYq%PnilPNaMyFgJ>pX92v?Lu3>t8>>M96gcr#<#fz>(YjodONQ$8IINF|=$1 zC797p#DQ^HPysayi!K{xp#m&58;O<19uL%ukp`9)#JTXY#uUsi40kU+#6qBuRKB;v z#0kf;xvTy^&glEP3!f#(tKgz?pYDgDo;WX|)*dU3KyYQ@D7DB(YgpNnF(OB_vfQtL z;BGL> z$&NFJ&Vvykz#zB8E70N}fjZH(#``$H;Z?a&9b2M8BcxxU!< z^o&P=$unbTh+`kxQPkClf>bc`B};)t>zEYQnQ|RAjtr()Z~6rf@X(OQh4gTVT{l`3 zt^=LwmK?UWYNpi0IY*xTFK?Lx+0Q?rOS*$$3*0|Am(@mqi02B zyuZy?GJhI&{v5F>t@2r?Q4GipI#1usmj0=|qQkN|Y8f7g?^C_Eh5(xdaH??tN5y0; zWi;JX8f!8BA)0JwtT;&mS-udf$EVaVsHr@^9$hJ|!9Bq)VV&WO)WL06Z@}v`(78#& zQK>J6{kR?Fif(^48GP}8oeQ>*-U;AvEofjos4e|7PcZQK+f4WU#I4c{zelruT6s9n zW?bb)f+@k-!U@O*@vI{V;5n`_J+mmY(QuzQP9i zJo+GKN<>l9JFG>uCa0+X0c?_4l{*G z9%c?!CEFf2`?FP-A}KA6iD70i21Zo;IOpTCc{}vn3yyKN_TV-F5Ob_+FLLT7K;P_m z&G)_ecXCs;oIwaW4^wMQnrZ}z)W@KFI!YPz0-)v4;bj;w1Zi5$rtTa*NW>+V4d|q1 zUZCa}khkA2aLmXo6CR`DZY?VWm#z@}BBOoCS*4)zA|GHruUdAx6OioT6gXMKpKd7yP;He%25+yEYz!v6MiAf72Bnu|GCNcu%;Q(jl zitm%Oy9HaSAw7` zWU<6zjZz%KM0d`s`2!08mholQ^g}b|uM>`XwM?`iyqzn+$h88-;!k(Tu3uTYz}8Uq ztoY5bb?XwU(bX1&Yh)={SuB=>1c-xGy+JhNSDnp{v#&jwwpSs2wm`C+uX*h?s6B|j zTNKe;WF^IAGfYW$MeN_9#3w~KRN9ga@QnB^*@h7nI-Sxnj)Tq)wj#0x_*2R+son3u zjPFiGi=}P=`lEQ78IfyKGMmpmXJzyK9$gi*=|H;d;$q9AgIIgj10_r!hB>@L^Ly3i z@zu)BnY_jd=OWOn9B2Q;ap9_a#qgytkn?XZe_<+>GNQHWD-)r6Y%8e?9-4PytUb!@ zeIdT>JW|g!GGH9eaIqm}%=nS+eokj@Qp)JgNlYF9`u8HtZsk>@y!#7rY~2;N%K=kA zy(eXKQ)!2#EC;ogyftN@;G`>2tu;hQ(TBCMOC z0o%w@edS34;ZiyCE91QCwocvMnawC?gn$xYp%wKNu3~fiV{HAZs()(KJ+ZMsq)NE8 zk)S(hb2==-WN|r#Drqb@igHmvYc9@%4he0TcaqiWT2D;2u6H>MmY~a;T>qNgaa_ZM zO6|2w6Rgq5KLBO55Za3+%VL&vnUsClk`;A@RrCUVu#@kuOK3-1FhB$gWI#Cy4^Ij( zNa4eIdw=E-!jWBG9xdfSSO_hlWkpE&Wg?1&=E78ad@T4z6AFv_$;qpf->v1G)IYGZ zvQsNjbTo~dzN`IyqlZYh6)cS{pV{dHEh%{hJ}}$Jle#Q2PK(6iG+gB#fv)~;dm`i; z8eGa$D^!>+Yf5p zw)N_PpbeBT9wF8l#{M9LU3t(NE|Y|nZ$7c`!TmZtP6;wnUO%lMjrSSmDuoKLSIAGI zl+Y2f<;CN47!M+DBkXVIjsD&L*9&WiWih9KB(tlCbFnl<%)q37h%AlaNj}#{PvM+P zc(Txvs0E2r_gKf&4f+@=@Zi8K^~p8Im`>Mk3SeZSXZz_ z;%>#sb4^&7!AnCt9m{R&#j^{5#_GXdFSjy^vjoKhORLLHPmF172}yMd*&<)Uvm;XW2A(OVh$0mI;yw`UZz9W&wx*1dY|R! zN@RH8l!j?%39?{_DNlcvkE@M_-w%!1!8QffdwGELrfmi#pDowiG}8}&XSQy6KC&8D zt+FxSDcoe^t5Hm=rAVqzef&dCMLXN-9_`{W9_kScj4T&KS6Ud4O-raM=fX|41%kro z$|RVv1~+fR+T&MG1Zf6dTM4a{(jC1;r`c1Tl&Upei_4Xuo4pmc3r1V#S9%Yuka5U4=QoL3_V|m$)#k~n&qaj7WjuAPTIuZaD z&(`@J1N2kt+#agDJ!lc!nWsJDYVnR#q3A7svj&U$jESKKIIAseS>MOdr3oozmK_-9 zCFx*hOo|qy>e>}&zTsn&b@^RtiCTLbZ1e<56pX%{hdm9GLBTxC-x^kwB9fzDmJ7?*{33i;%!$^egsT2P{20?TCSI}z8kKadBY<865oJ?C*Or@N^>>%BrD zO{myrNA|CPGX+m-fO*^|6^82^nzyph^yw3bNwm?q?<)^DM_ptrpx*6GTcW@rY6YiF zuBSC`<$gSOH>4VBNQ}Qwk{T89s}IXx0hPiMS>)2m5ek2+M+>h+7UCCXG}fi7Q!`WG zQmo>{IwAphq<ygDpl)D9TyVlpyHXvjAAY%?Sxo@35aGF ze}q7#p}|^9sHZoTn3nbT2ndLZMN?PYGI5Ma#;|p5m1|OCI{t)ulMI+ZC9@2#=z3Ps z4N3c#hspGs^_=2_3aNLiXPF&^C2bXui1iBQMLVctMzPQBm=9Yfn&&krNQ{3RUp^p^ z?4HVk6J&f`I(=$ShbsFBj_DftUidBItIQkNl+SX!dc1m)1++5r-J_|Vt=N7J_4KN? z_UnE#;QJnFKg$3Ck)tLO@#8j(pfW)KGNUQ%KGiAGx()jxO%e9LH>x=jRPo?dir~Tr zFFPveMkJe^%Z zL7%2fNd5Pr846$f;f9Nt5QzJ|1CTMJ$1;tWQ9Psz6d>yMEcXqgZ0Waxe?_qZhS@G5 zz$S-_fB`O8Y|iH3$EflNPcwyswcAW8EFO$m<{@GX9y7$^$NhTH2A96jPbka1?%t%? zBw#vQv%S#dDWUw1{S~m8wKC2xbF~Di96j>7I19B>8X*?GPUji`dPbxz69(w8w`H(j zOFehAY6hRbz3i_PX|>aYX44q}0ov9^U+rnUNT$O3yw;N9=D8TaMgH~*;{rKNL6jqZ zQ9a(G8%fYDBIB!D4UHxOm`5S0UC!qu zQ`A^H^6KJ5P(O3#&=h}fKgsYIetLo|M(u=B_r}t*KXNRoGrx~chzXh2s z5c+tt(0NOJG#0fbc&AtIX9L3#9lM}Y(&8GW3q|{3dc9Snrh;1=6!X6BtHv2xUVQX=3_KPwZskil6yJ1@BGNcT^oeI*V`V6xVYu#s?AYG)} z$e=AZ0^7dDmUX0;buIycj|>&M9v;)s8wTx$v9k&LBJ4AXaRgN>7lg7uc?d_1VbAiT>UfF$=S0d;Xm?unM8WwzoPC$aFsfAbYqu3Iayf{?Muj$-3Bo{waP)x$ zVq0=qFauRUK^?inL|*FdhTh;*7a8DW4WKe}&73tz`}at?2#ef~11_Uw@OSl|fwiZZOf&tDMgYgxHn_GlM%ZuJ%?mwzU> z`g;8L+V)&B2c9lDjBiZthY`2zvwblS;!DNRdP?FWw|;-)bT*#L^(Am?gXdujLh-4U zrOE<#ut(dLja`SCS9*xpoVT9i+H}TVTn@)Xq3Pcq462^1E-e?z%cXj;;>5CwsV5uA z(p`WWiXmH_sXNY^PGFk`9{$Lwf_KnkUyWzuf>WogLDfnGq#+4-}EV)mwC{uhA^56s8X+ z5ldpab>%Dl4sQOSu0Fb@_YWp+XP`fN;RILM`zP=J>QFoo#WiSyfP8JQ@g|9u;kf{h zl|=*v+YU)XNXI<~MYenDtO;y^$$0G#*u;1fw>QD+wmH^5Ub4IXFXuExe3}I^8cA5zQ$@-K4-GX+@Sgf!@v8pe*w0*=CXhNGaH<9>m|Q@z-iyJSnKD#E$mW`c%>6U ziu!=&4DWV7Pb{#W7-uBOoo^GnFTfIf>jG@O_v?(^IW;S05|q9SU3JzaHU37~$wU_9 zmZ;snpmJzh7G%n#oSblv^UdzR!FO`JQS7rNT7hqxA;gbG60iTE()x)f1-PDH>7DXY zirLNcb^R)MH_-kYm>l_8t{u~32$$ji_QB1yh7L_}4H~RmjtL`xE|d(zm5afsrR=ne zab3tpra4a89=i;!66?!syE2lC{{lHBF)E}ONi&x)D=#0A zQOQc;Ya7UEqvTkfU2b?aSd}Q$q8SD)5NlFngG>VDYh>`vSF=0{10Z6Dx5j1A#k8iS z(D}V~aSQ9$y}-P`SZ0Xu+B*S-*85ad3cj(5-q@}@A)N`LKev%w5gFAyx$O&CZ_MzN z8t9|Ay1=e__)W(L>i|W{t?t>Sy7lcI)S;G*2 zkA3NZ{At78oW;cW1E`9(hh4K9+N<95)s8tnVoV)3#BUk}*RvzN9slE}{ukmK*5{6M z7oP+i(m|~RZnuc^9a=ue9(%rR0+hyKDH`%c6!oIb6k=s|V92w+YoiL1w0qxpS6N$GV&;U%149;x>b?yF_LuBfv=II1VI&r<-!aZpf_ z%Dp^SU`j$!xkVKomqKuhIU45Gfg%3x%n|cw>5(59?-eO%hX}^NeTo*P2@{z|2o)^K zNT)3oS$TwI%cTwHR9cLn3fHtXSk-iY0hb6i13(`XCiT!1q~+8lzbv5L*Z9pKk+H~zn%_Z!9p&jt3zq5NN;;xsH7s*f`^NQrky*4Xb z9A}u70z%e!P!g!@2!yWxspGKvccW=|y8T8==m?@ML5L*Yhr%lt!gYce**w*GAXTC{ z?OddY2Oy(k32AaFc`^!V+VdIQ2&M1SM}!@^o2|N{35~hoXmd(Qec=T=G-F7Gh=xd@ z?@%}}GHcowSlBVYbzI2d+hAC<8aDgJ;+uvY)l(*IiqWd;?qbzYv_-Bz93^CSBl2Ng z4iDj~TyIn|uB&YKdkaOV4N!7ncY-vW-)fk009=>y9HSlge#`%X$>fQ9ghS6aZ8nXK z4PhBGix8vFUJU-MqUv-a zai(}I3%>2PEy9s%gM~nJanwJDm1SU%l%-T4Du=yjf~TQUud=noyKB-SdHFaMLa;Wh z0;u_ZX~n2*e6hD@G-ky8ThbM_(yuaA@{LlikbXGt-~8f*v06 zXjScVq8fu?;QkZQDHH{`srQGBoXo(qAticmW8mJTWxiryBazr z%Gv6e^2s=cx<<$4PYv^mWZ6$F+H6NSmKg!w)@Gbq7HSQ(IW#?QbaH1hqARNh0D7`= zjaPk*IaT3X8QB&uw<>hmQdqhS%IZ_KAS9Vw;dTL zU&28k#M|RwGaa`O!1!V(6sQd^9RYhT3)POqgfAhhs$v>Ab?m;chDJ{2;CDD#F|mAu zT_9H#;RoZ57(Nf@>eL%q;C-PjK*DtAG3qTmG%z^TbNKJP%p7%XcCHdok0B`%vFFkD zp!=TeGU=qbWI2jhgB^+CzbymW`Vd-BIA1az(r!;aQew6ClX)?2T(hJy;i6G}pL@}0 z8X-6!k!C+~yA7*(5wgilBfJSx-oR2jU3(kk?5{OdXlRGId- zz^MueZPAt^>@WfcrW)fb6vond8FBteuxT}c$Uwq;;q>8}8nU^P;Bzb^WweeE3nlv; z;dzX$0}Mo=V@e$*$Fn&G0Ah%IQG{+l@JJfHTMIF#uYc2F%~O-CbbO_Lm7Te{lJtY; zS}cUO(P%gFeDQqd00G{QE!QAD;~F_Aw&fnO|98EEoyn)EhW$ou8H=7T+ik>bI(2i7 zDD2bg0r-p(((?$-&f9Gt3+}@07hB}9WpWn2NlcC%nneutSW5R6fT40VoQvl0Pa@q7 z=jx5anp+Aom>SB5M_LLD4^1und1c7u(ywS-3$pT6wbCtui)K=%kQU05Y9%g}NVSBB zE0^+=Wl207%I1_DZ@$mO(o2?(D(fWD{6j5{yweH|9Kenw>pIOB@DwyjMm# zJePNSno&#mHFpjc;+9N0*}!q&pCAHIXKVLiPgGa*64R`3Df~a+UX_N^N@c>zpGLbk zhqMubZzRYljnnvM^7j}(1mB$6v|{Q8*)m6c0SwCv&iwTl0K0S&?`Rzl2FZ?eI4TAo zNvns!o7sJqp&@ztlJ{pS--GhIsIDd#D?_b!A+~pWTw3yF*NY_!-mHaJL|NEK&DJ5a zH@6;2a$*+o-TOlJPzHN&40V;R^WxDufkV^@FT|QD>G%OUO{@1YfxQD;(m!j==C#%) zdCnTQq1__Ifa*`7OU!Z)lCAt~WksP|m}-9pLXYGb>CYBX3Rs5IzCMSw4-Oyuc%Qsm z00WB+383zoYe0_#?`!W*vyjRR=u65&r#yaG)6QLQj{9z)^~{RcPB2Rgh*JcGrt(73 zsM^AO5y+!5WAJyWaSqPxmkTgYqDNvRCnhFz@$|q4z|s&r1Y=&(0uu?_|7@dShs%Yc z2JPDCNZ}KC5Z&vHbOye{R`Q-$IwCSrhq8HGPk#%14pst}xB14=7z@8{grPxw&*ye? z=+ijO{DOpu!Gq=w`^=h}8~Tnid8VkZ3Ob}Xd^l#Wib^k+tazUwxp1f%hAj?eJ-AED zo+<4V;2C^=AYBC8&3VcS05|v*K=S@w%t(+(a5)6$iG?Py6-i9l%AD9JfAc(m@-H-! zn$8jUFBY2Z>Uj2&29}gCMW7U!5QwiL-`ck|KMxj$6^=X$-lCmXrQ!GU`-b~EqT!nS zH75DVE0)L#L0H_JdGD_V=ua$tTXy@tQa$G}k1@Y9~ zM`mJfnJ=3d-NfH_q?sqe=4`;SmIW`9=IBJstEVtI;msPT`NiAs`&#JVzREl&8nPkr zKcuQ5#?QdtV;}VMH&SCPGVk*@YPEshgZBuW6zrMVYGRyl#11%8D7GnGw67wiVqE~N zFAbf>V|e1m=X!?xPkvul`kl1V)&s;34fYr?ujme)D31X5?MnLmM}HU^x2HZ!>c3JZ zP7}y?IDL2NMz1g-quLuMvysylpmJ$O?`*&+fC5>VI>%5*LB`0O*$87+&dsQ%ze`Lg z4kVMs17K>kiHH~!YRsqN_+2I*n@0hTC*^xRW@Nox# zNAbO03Xz2dYiQBZn9HJp0|G$y)AtJ@PrlX2x*Fp(J7@3JiE(M~>}b)+{C1VpS#!%T z)Z(A8RIKI>&Nc)az#k zoUA)bvj3dODrFqgO#HrL2gX>(lLc);g%Lw+BOpbOCwBf7eNa zD0XsmR*yY7+omnG=p{sSaaJGZnb-@{p983hjbd~ zmA0?vn@#KO4PvwpKrP*~BOY#Z$+cHxAXNzNYxne$F2a8LYgY_I?~xD!%$ee9dU!D#CB!c>nn>3y^aB?gp)Z6zCt-K%-&mHK$ry z-Kp1x`@JL{hMIunz;~cS;+B(jhd!qQ_!5}&ms?q90it3bEmk|!I;ee~KB*YNP`h{! z*RM|~B$<8W+bMr~rq;O|i(2wYd_Jw{oh&(hIbA!)vvu}FiTRIApaCdJxUNpeo{nvn z&ik}E-LlPO)42S4kx0Wa6kBG10aTr2y!8msU&bYDnnYH1`nmgGEgYWE$2X$HbJ{SH zIZTqtF3HW<172Gy(wMT=>@ypqLY~r>c<-)8?06bC#}D@bF`SEW{=NyBJ=s}=yU>?J z6XMG@2!SzsU=|U)QF3zoZF}z+G8VpnGM2$GaYf>$XL@O>DFm6^gj`PnKO5kY;d&#u zaZb6Hl26CJlP#R3*{1ND+CZ7>pt?deG1JwX;Iq*00(YgnHzd$w5`xt8lv9#-{3x71 zb%zv2&=LuiQsb8T=gJU4eDe>;Wsa{T!wTiaCc4p5W1>=)#ZqU*Qt+?Eo|5~I`?dHW zg9pX7chHc)c>G3IiEy?6MMq9JdQ*Ir^?q}Ye(^3<(2vP&=@`Ds~d)Q!w z1Z0higa}f2$=}3~kuI~%VCzH)a`Btu%oZM4@pQv@jaPnZYVnmsn&S6BW5OcKNUpQZ zpjySTsL)gfDO3`Q@$;HySN>|^<3LoxMOnm6v5V7DR`88~qf~AIg(^i>5=-&x>55nW zu3?MH|0GUwB3UslbFn4}Em_fw5LP@(&?5Nw<#fd=f3+JDU7_|UXYe!Xd2SXfZ40mP zxRdipc7Zb&%Y%_Q$g*_3I4Z4)B4uC-l#g7Q#rdK_%0ZmuRL&zZ|9j@rPFe-My(D$8 z@rtbbzXBe%n&0YxPAHywX==@Ia)t2evmkl}-(D(yBuf6nBm$Tu{-Y#*G(%#13@ITS z%A-BPaQnhRV{yqK0y2DIDPmlzI}Ih2JxR%fCBptVlvolnM< z|36>l%m^sszdXY#qL|84c#Eq4SUfh%BkW7Z59CxwClA-ti28Da!^SeQK}=1Xg1W!{Hxh?4cpxVm z#Lb59X7#Vh-C_xOe;Rfy6C3jIq9dfsKg0#!?ff6|ZyGT6&3PgXr9 z!Y0nn)TC2tXdd?-S3|t(sH(XStdLbJJ&ZG{rOqS1PZZAT93bZ9kA4cGjokxXU{Gp8 z9f+rI&#(9!^2y93(6<9NKAVj9$t(p7*p~>lPd4fmi*(rh>4su>|Xx zv;gsN>lBhggLwmV49<{ z^Ytfg*Q5%nchnO3DhnP|mlc4~L!0CGMprfN6{7({%H}-Apee{*5(28wLdGjXN6~jt z5Q8jt@KbL%lb9f~MdqzS1JO#1C?l$hyR{l`$41#Bp^I_gWSL@!Q<$H_Wv2iT znh2r2BLZGUVZ!UsK{;3vUAiR!g(FB1H-bm8hMq!6#>#zJ#K8v3#*7!g1Ag*>yWc7? z5{!Ko{N##f$B)AB<8P8fk+041wz~N*ME{EjN^1I?LwG(V>gS?~Cb*uVw;I?GZZ8|m zWb^<}U02w^YxQ`4 z42)mIH@EEXGDf=%=RB8PMUgW`BpHSzb0s|_!|r>gE{Z<95DyNY$1(}bokteWp}G2I zC}4lDiZ1jeXoICVBt#@HqF164RhlqWs+nwK=rr#^mivv_0?VM`1c4P-{29!U^^%Qx zmJ2j;gx zz%e1}+J~(+EWB*F50~o==CRq2C1=z(?JwDn(-F8a^sl;gX)%2=bu zFMkU1=;#+VLj39)uk)5qtM&L!0b)i1ITSdMvvuOu+Kq3K{yhlDx;JaZZ+@D0ToJBb zwB2FR>1p3tIDw2`#9q<+vvlb7TPKixPxb8cBL|}FcC>5RVE)wO*&fEnhJY84A$UmV;=oD!f-(>mKDZeq)KkfjBigX>(6Rm+T_n~b<_GJBj~M{TOD8i}f_ z;B{wnYY?57be5$xatQNZmK{qsVi0x=sp^xyJsc25%??rSmYsu~@ysakYOG4nUBdQZ z7DgUjR9?jY*9{V+XRWnAk>o|;bCi@PEP{TNFBhPgEls8U&`=)dNBdXR!q7hSRBc0p zYif%`KAR_v2=alT^^|ipJ-Q0#Y~cA|v5a-BlFg%7gzTU%F>K6t4uY07@quUY22v7x%Tu?BnvhOQk-5hbTt0eW1U>-$vkZ53Oc zM7Tai1LS4&XzXxs>ZZ{_Z$lP^Qk-tI%DvEIg!Z3kOE=LJwpZv$hsNTJx$n4pEwn&h zTF_^M8UuBaWZcT5j5@v@-eoPUN_lCcDpf#$i>S(2pH?~61 zUUcVNgnEilDt#^hm6}aUr4asafi%LV=hS%~dg}ycK#{`79zO2h=bOs!aq)Mwu(o#;`6?o9DDlVj>s+nRq|r&J#dz|{%NMha;&NPt z*bc0+X~$`mcdd9y|d4iSy>Nln60_F6gL0uUTPS?pcK;Or=QpVKo5b z@gm?iBq!&;cYf(k!W>!-RQspKsC5SJlZCR{7!^0n8seH1NH?rTmnPD6sX%X^@@qmp z_=Ps5^tz5m?>}scou0=|Yq7z@vhB0J(yPvsliVta)lNVa=8+45rjgUYo4EkcQD5vQ z!nFb?pqCS%ahICsi;$2nczDOHiLc+mJ>tRoFP=Se(Km|GD_!n21!UnowbE6y4BW-~ z(V6-)LbB-?gVvO*QrQOT2S+Plu3NyJ^d$`=X)!u(U^NQ|UZ_{?D|@OY?rQMO%{%2S z8LnDOT}U;18+NXTUP~lvQdCO>$UCeDRlW0Bcts%K_ zHrC+08nGV#8>883;S?jMM)Rpn2=6+a%LrmezG1Ae@Ydac+}@4+9-!i16*pTqKU?*E z%C4l6^2=dT1jdb9s;{h`HcaQ;!R-RSW(NLnFTYmFpt9$VN!ae2LA$ zSg9OAmjzQK?j?0MK<+~w@wpGbRQ-n5*0Q5I19ah{?xL~1&>nBq3#{Whx^^qSOk2^E zyY^xmY9l+M9Zj{FyQTZT`tmaFMK=$F6+Dk$F_h;`S_gskR-GA49mIbR{k!TSt__yw zU2W>bn>jaCo$<6Up^$N!a8>;R8Tc*z$r?Q8kn(vV(n8||0o z{_5%#`ekHX-Pq3{v3%IiBs6{3`J5A3v}9z`U&e;+z|UYX;~rDl3^`C8ihLc8peF6G z6dK=A4p!Mx_0!h(I2X$P-DMyQMC;kx5v^T_ZX7q_;y(mKh^Y!X93Vh5lt4fV(x70d zKv4g3A|1aY^nd@7$WeiSo)gRX)q!IY1SCLqQ4?{{a1!wakP=-4uz@)f;{<4M|D*V? y`F}JhK>s)W__ulSRRlREO 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 WS?(*;e-!A?a~K>9%=Hrj1N%Q65ANsy delta 14342 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 Q00#ia0RRAyA^-pY0HE7rWdHyG delta 8446 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 diff --git a/test-data/visual-tests/layout/page-layout-5barsperrow.gp b/test-data/visual-tests/layout/page-layout-5barsperrow.gp index be7d700f6860efddd5878d347a425f8cf755e4e3..1287f350959e6249c886956b93632e84c2fbb9a7 100644 GIT binary patch delta 14725 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 delta 14680 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 delta 14680 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 delta 14680 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 Q00#ia0RRByApigX01}k)egFUf delta 8260 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 C``}vu diff --git a/test-data/visual-tests/music-notation/notes-rests-beams.gp b/test-data/visual-tests/music-notation/notes-rests-beams.gp index 7754e013cbc1f57e04bdf130e6a8fc4b25ff64b2..bd81310d3c67367cf7b16b964580853ef3a105ce 100644 GIT binary patch delta 9542 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 R0JEb^h^E4UDxmzw{|76|a>M`t delta 9300 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 KqcTIs$o~K^5g8T$ literal 70962 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

    3S%t;rxwXW~I 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%0AEb6!=}7hcdu24@v^W1Y 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 delta 7823 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 diff --git a/test-data/visual-tests/special-notes/dead-notes.gp b/test-data/visual-tests/special-notes/dead-notes.gp index c9c7581267fb0e759997078ad9333087eb8a086a..d0cdf2f5b1c7eefc00b1c70330afd62a0d85524e 100644 GIT binary patch delta 7097 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 j000000000000030ff5#zz9K#WAd~$f8U|J&000005S^U2 delta 7071 zcmV;Q8(`$KMx92GU4L6kZyZ;4u5Q{Rk1X4yB~pAzYEf!g8jr(>oB%)ucfMP6oa*tLyDv$&PJcqT6A;H)eG)_+H(2k- zZkMzMZaivr-GJ=5-871;kALu&e>EqbXpcib>>ouQsW^`F+IlN>L(h%9r%~#reiW{! zu^T3Vn-Y&ddN3TpEOOYXymjn(>+s(`aXk{xI9KcKgZANWz1Er3>W$O(L91P#YfX}r z4A%#~M-C^k-+xUUXWrPrNtF0>KDr4tblgqdm*gb&qu5U;Fm&mS`?>uEq?hi&3?$a3 zX+5PARTjiVqX5h>Bw>2w#(keHa{n#9;q|uL>Ck<@%l_iAZMPfE=I&|zx_EsrCZtWy zQ*9?#KE09K2|ePWACi{;Q&QdfiQ~v68gc3;>5TJ+w13BvnE1r+zG!u0ccdS3=EXIb zy4PFxV)v{S9EYs{%$7KnIcjP8LuGBpxs&&oPxgu5AEdkIBk&yjsQTzr$63xjNM~x2 z(1V$m_o66;jh?uD@^m}|do%*SA5x1^TUBr7UhWW=o%OlzrGx6DufP6gS)6I;hki4T z&Jq$EPJdkzak3qaAOc{2#u63z`t~4-J!-)tKM4FGfo)YAHOF~?n)}2B)4D;6bR#-A zVWxk)xw&}{ya_=&j){6cjF?&JuJ@w26}ZU&!tl0O_sQ5#-ME#~DB>p2TvGjqHFWtS z_x$4>^3rENsXhiX=Pf0pf?J9{Gb_S^I-n7B#(zVnazp&+IUGJ|gx=9O@w=uE@&=&q zKOaN^IVDMY9PSQB>7?n#aHwlCx5#i5Y3F!*R;E@mqQC&wI`Pj*Ko@v@k$S&H((!10 z1b;h(yyEG?>_4Y%nx~B8tmr7S2j(_FX8zf;D>BFYG$1q1B>@d<0uB=Jb=roPUp#e( z}Qk z)Bo{2n{nQ*pEREA*4Nn|t@?Fg5PHHR$bX-q8}M-XF(j58+&xcWn0Vk~8c*Qn_gN6H zdwv1{HvyDNdHf#tTJZmXhCWFSLiUv7tcjEMGAnccW|_tkHIEbkDbKmxAAPa8Dfi=t ztu9zmC2X~^vbnh^7Gbd+k4V4oM~xWZz^Sa7@pS^ek6k|%9^L+6=lSMnf%t^LP!%0%MEyA3GFG`N@XDEX)x+R#<3K zdsZL+96%#C7p-j15)zOkq1l*ZwP%mSLpOD`gM9xdKggp~>UK^ClXNgVk+tf>$nTPe zypFK|qBf;}QSs$euA7H$M43z13>^EOBr~w9pGI_%0)Gf|Zir)y z6T*Mgg4J4N ztl4+tVH6sJZ~Td5A}P?DHf4Iu<86QgilqOAAnCYI?Zy7F6Q!rF=Z_P{Fs2XcAF+aV z7c0>M+_VB+M=PqV_&#CIC4a22E-IYmCN#Y3EDF1}#+{VbBh&ZNS0Ypzy&mbNd*I%L zVjD!iESxEXYo<}iXN*$#jZ0;v%8cfOhx zb9W=pZH)pSQvOcfYyePQ!VT?ro3I#EdU>1=pU^|hI5&S|J*MR&27e30B#FlGN&*Il zP5esovcI69H$648@wI=uTgr49Opb@#0S2evj)L(pWJt{%KF7m7CL`jef(}{n&WJ)5 z?`OW(Csli9=p)4npweko^dfK;~>#P9QBtCy`MX|6CqS zwQAh{2^M=$^p1PIgrpx;e++0S^S=lCrQU3KzcWr!nibVYcYbmC0@u6e%=NU_xsRO4 zJ*WMJ>O*ACY+=Q?7r1?e(~l3o{-&n91-^nNuaWM$-GRVSpnvL+3X;sa!D!&N#{E82 zUgEK!x+<%$YXrgT*OttR$+(=x5*~>6fVU-4d^8SHAHcZna>WeKUu z8i%wIa>tag@PEIuCIR|0S^OYesdFLvfb8;qV%Da@GtQg!?c~T+z!qZ8aK) z&1XmTd_P7Zk3P$GiB>ICQD`@syiTAr(mj`rNi8chs(*mXhR&({a2oG|<#*!oP%94m z;H)-d2~CP91Y+Nc<723VqAD{pT{Re^Pzx$GBWhUTJP7wO0@*T=6x*46xfQQmjq|kX+YF#j+Qjfsa!QTnlX=jF4K7hhlcdi znTbf?cPtV)<6N${o;A6yF_)9kay;Vwd`#m_m%tmvF8weeF)Pt6@E7wa^VKb3sOJNB zIDe$_&xd}8wikNQJ6}~*9>At)bdeM(4!KB-<`6bS%^) zVpo;I0->pkYFAeE3dv>RXQPD0*1RqpnFUfV|J)tu3f)In75V@F3pQ40Z;#i-WI_fjUt&x6@*uf!-Tnp zc&wY!XOOD?j^rE=#j8etV#^s@fcW!vmm$vj^Griv;XmWdvOk%IaP+Kouw9pk$W@>m z`qJ4~@{Tb*I%n6L|Fhq2&hOBtZm{hw8EoaZ#>0`pRq|^F1b@&t zRyP5Rj+)h)wePHBS}<-Q%(^hE=ad50>qfF3C|F>xtm^K_*Qc)>=NhIo&p3-*9J*Jt z9lT&%@0c4@vZV|A@W?rhy7pwm_jwD^g=kCPf;V=evoPbZr*6_8!}L04UHa#DtY#j+ zS-Q?s#-MDs5NJ+&(sGf2h2{)D&xh125H`SDSP{315 z%fhzp8Up;~`zA4y5>{U1uoP=1E3kVOBz(Jm+y$6q{l~r=^uVp`UI17QE*x&aiijm> z)nvK~%@`(#X9TTHx`WXF-LaNQOG_9RW?;z#A*J-ueRbUM#rD7j7wOsacYn)9aaxP_mD4K#(vNu_iwL`*a=!aaSU9>K5EK$*> zU%D^;2Vr}J(PSys=?2Io9!|UTIND#v7(1u)ye-DW`HigAW(8r#cYph_JJbdBzpo)U zAZjL1cX225(YyH?ZZ(Bid$)nz;wb^@V+InEK%AN^SR+h-EZaAoA6&`S-l$6_P^FXK z8LayNoWR!|V@UKO>j}H9f~oK7qiXSFeG~%)i|KZOW@LBM>@igf*J<+2IPY!^X~}d0 zI!eD1xc{K0KW`LTwSTV#{Sl^Fh+S=EO`kjttF3%^OKU>eaAp%V^(}pzk#6feibC+k zSwozyek-?m`}KSJ6V^2jH2}U7j_|ViC^p`zG5Zhzoz7n1Pzn`lNVaP`nUK7On$kMY zivCbWIEuHpkdHSgiC%U|zy?mDQSlT;26xnjf&RO8p>dlHI&&`IHtv#eqUJZ^+xQw!3`_#RIpEJ*AJl} z(P32&RH)1wiJzJDU#;ZWANLEeM1Zu&o0{XiU%s+sq5KB83k-)V9wP=9?C?T&##6q- zlB+1eT{W6}xT9FxoUD71)dCnKw-mPK+Ed0zwurVKNgQvRG4C zKA%g}!d)0x&2hCX>$xOIb*c>kuyOhc6+wGom6HwY6mmWpW`S3N?^cG-O^2M1^q=GmVo{&A6Jb0PX|t%GNDK=h_G%?qmHoZUPkc@wWsLFW-loY^{J&17@2T!3Fb@v z(`TO-lzPq(^JrSgEd)-NIak?Tf;qzA`MO5hY1B);cvtG7{V3x&H3Cn9$!L%TfJsS2#lev?jv`d`m=uS^nL%O|aujs|Dp!l} zi^oZsJg1ypNZ9xsCdONuz;qbKlS_Ii$5w@ha013|O)~*7`#41YmKnlRr;}~%vwv`d z%-XGextelSE8E%kD0hv|YZNBz38m~My_-o23p6fXV_lx|VP0WCgcD)Q>1d<|3rLky z-A+ljfP{}-OpsFQ9D5fms18Yl4)eZ)0~$)~_q&rIs=*M~f^f7+YTm0qE0t% z8S*-a3WoQJD?*vyIKP}u)yT*aKc~?GTLss;Fj%qHJJ zOhl#1;vYd|4X?i=z&|XV?%|X-FS$gT_wWn)lEFZhwnyH8D1oz7_*1uT4_Sp7gqp@lW5hO>g^iHz|NE+Q#q zU@hE@b5Y$qrRgx8DKvJB!hfOSH2CETV^uuszu4T&-+n213{B_hdKwEh%Z5_ zf0qdR_1d@2c1c-i=XJZ%3!Ssn4r}FC-+aBt|$<3UV%L*_j zL(`FeyO>QA_)34{7AUzbE8N3c8A6~@sVY3OsOgvKLQI<9GGwjzFn?%E&ux8?I*(jx z%e!kjaJvMFIAgUoep4Bpa7}aH^m>1vQMQ3OF!k z^~pvEZUIZBEXx`04!t^FSW5BiWaPS(5;75>EMn;OfKmn#bq<%OP-4DpMIvj2(9aOe zSXWD|l^Ik{R4YzK`F}`WX20l?k~FzJAlq*-W`RE51MMs$;z99l;#ljlWRc5Ve8LIFv5Kxg(qsl6L%uRBVV@+>&YL*Iy-2Wlp$S@f~ z<&5!lmtJd2@ls$aA``ILFZ#xz(3S5Mr&&27Ww+>v5pWP_V^|ypqfPYpnQ_|W8R#q& zlJdSe`@F*lIC@jThvq)}9RHT{;Z$Exa+jFjIv}+Nl{6SzD)bG09==|QAg+v$d_`6I zbsK;2FK`vEaF_oJ;J!{H_Dlc(Clr$q796w46siS(%VCjtc@s17QWYIC49x4@fLon@ zUn#ok!XyR1n!434P_6-I$VtDGp=AgY;(8acppxZj8^A7EGXG{O@65!7140qnFyBS= ztxt~^#P_K?p?oShj7p0d!=*iTtPWfTNi(f7cyK>WsYuy1azP+)*K23M1Hv;_Nv)yD zU^-TRP^IG__J!3~nxr~lbS}l|qr90eGhxDBP^Ub7m;#e|r!b8(BmS)tkzVerGLRj+ zxltDSnfNnV3o@VM=8&^_N0v}1#vqa9C#@qFH6`u+Ox$_a`LGCFDhn(L4c-R!!e@6e z1!>sokRZy4ITWvhm9YZBbm`3k*D9bT5R^@S7>f($us5+cLkEPFp9-j9zKsRIz+fb2 z0H*>-F>)$A{0gk0if0AZ=~dS1x%~8kRP~AuNfY#=Fo>kVEVwjw8&}Ocuq#`TPttjC)OXOjTLu(0*)GdGuE_~JGve@OccHQIhj#+1A)X4}hu8h3rgta06npy2$UOjW?d6 zQ@qK19V}xntYa5qBWAbK#Vf-wC$n#V<4`&UuoO3lolKIT3@b1YqKtqd%g})HX$KT3 z@Kc~_!p8Es)qM@pWPUlO8bQ>Ei#VKpqEnkw5CLB?(|u)!gS|Ro+7RMi@YD9~5r;iT z3)!wrX~1l+3^^rybUWC3g+?t0`t{<`QMY|Px;q=)t?bv>!xu);d-(d=Mo0dCJ+uY= z-lkq=cN!U`_Mm4Lg1-DX01LAd;Z8tTl{Ir2RB#44>oT!IIZ%dxzEKDZoB{|_w<=7U z?7A2u^%3_CqjsB!roa`$0VFu|vWCR;oy|&itYyGwc$wL2?Ht3-fRYS$N+e+Pkc>%O?ZxZ9zHJTCE~BwEsy_EJNF7So#DTlgS`3q6z}Cz@gR! z`F8*&AlrrfVHjD{1>s>-$P9*ZvuXh>pjth>hrb(;VwQVV5YR6bx^C!|3#k z?yI&T%LHTC%RbtmH1m%I-C9f48T3-B&eu@&x1t(sMYXq?N-r~iM=y%+*@)8kOO%fk zrCu`P{E=74j$Jyp&R}NQz@$L_ZltZX4D}CFgXE_qiEB&gjSck12KrQ}8C*86>ZC28ltYbV&JwBdwWRsJ(jk22+enJ+)~TtdO-RiaOR?}YPUnavWAsd+9eKe| z;f{LC8JdQ4weP}z&u|+R^nN`W78iXRq_}<(-=TB3XB;d#-jAkAS&9K2Rii2dYHOpm zBn?mro=O5`9OVW?V1l0nL8`wwpeoLUnPc5~Dz`IAp(qTamN1NGD~ztz)B1lFVRZiB zmNC%wwEaK0Ffvz`o&uk_-^w$IQc1U6%rPp(-i>KpfvZ`6f@48ONJHxwLuhyw0tBlV z8dzzax1W`HlQhUGoO4}DnB{W)I=LKH77F>}pj|J2R8ck(CPfPT(k3fcY{>S?3cEE| z1{=9j5k3mJC~ITKvOcSOs@_gz-S2NH>&}zNx;9rfTfhUd?mSn!-d@(-Eo9x>-%{4b zZteO}vhMzW`Ruw@J#I_8#&5^vk4Hv6nYmPZsIK%o`TX7Zf!>aF0ODybiTZ4L zlqcBRv9wR0XSCSwe$&jLHdh`c>-}eI+1tB)V;i?ZKlrAp!BaWB_0rDDRjS68w+cUW z1q}5?-!C!Y0)LB?gYbtV62DAnlnIT2SlmaY=PT>#zZ(A^?VOAgnLGdh+X|Bq795j0 zAz}&OzD^@26aWDBlcgb70gsdYAxHw?6q6ej89=4f-UM6kPG*Q@%~uYOgpWyh%=%{RwMN`D6Hi8~-o|0iTOit9np zaO1>ruI;=e;kp;QXY_~NC`w7}RIWb_qP82XKaJfn@s5UW$4|%A#|K}3^S-!p>h_Og zKZ@b^700Q5a#Os6u5>Vt{Z8_HnD`!XocUw7N17xZ4cCY8(}~~fr-yFb^TTR=#c}R8 zQ#bV7*n1YGZhz`W;d(&2>8>C4NDO}*M~P2=+k6JEaVp<$x$VGBM=?>ir*8YCKTi9D z7wa9$$59bWKV7bvC z+=@nF${ch{#H}5>ofjl+ko1g@@L97SdSI+mc~3m;kv8>S44cULhAwdEho5efmp=PV z^~uJ@hJSQD;OyCG&?a#+9S4NIR2kbMgJGl@dv*GzxU%QQgD5n1^7fyYJK6S=Vc?Dr zBabawRf~edW9_*sOLEc9C{ChyKTJrR(mY^~&6y6^IZsLG$weKxiF&64z|vNAyt^1i z_83NX&WCQ8P)9ueJliceA|~1r@3bDEt~_?*)PHw_Ch0`<;+UGsJSq{}21|P}gwW&Q z==90!YkS1?NX$Ul9JNzF4Tw`&k*FZ)3An7)ho^e|Xr%Atd;f&MvO(NI0-k~lW^jZ& zHJo@j3Q~U<02~9-p-=3GA&I#;0MJK2$nC5f#T~K-Fa1drrfxuA06erEj|PcTk#0Wo zy?-7_PhCHyQKZE3U+Z}{$KYJBmv|fq`vc&oR9gBQiS}mT4v(Xuc7N@= ze}04VFZ{+4!+Q9*Q^^}OXB`V1}SF-bYY?uY6w z$C=X@;S~0f0Hq&}62J2%RrDdNx_>fGM=@;0;-R_cN zXx%&wD}TEx?&$h)lJXbZkYt9;i0r4~;Bc67uGWt0Pj_nT?5}2RT7!guf<&ns1ko8| zbzsO8D0x+iM#zD*MT_Gzi2YHxo0;KM@&ybh7NOqWXJV87p^!c0yi?mcI{x%z|LI<< zww&dB(x$61hp zXAIAxtG%r9gS&Yku|mdk#qTu0l#It1a>=>A#Ffw23W<;w_CxpFAB+ao%^zc=qTk7G zSv2fz!S;ypw*QbwKJB}M!5FAb&(;6^2p6C&pU`)b&?hNN+~`{2nRwFia?VL-I!-3LJu83?gXUHRMnmvbb%~S z`w`Vp?+WXAdgXFzMt?w!ZkabenLar7J1?4@*d6LzHuXYQ`c!5W)c{S{ijc=k26}DS zZi34VT_Wl!Ja|99uYr5s0F|N?siYoQWLhdZR^_C4$=B^RNVTkPQ>K1T@Q4(eQ_kgD z^LeAS-#XZ-ttdGKVhUKdp6*ZbH&e4I$nPAXfT&PZsrpzwNs~*8`n&{y~Wmu6DI+@9td@-e5&`%9&<= zue8T2wbP@M?Pjf@VRFy)h6&7*s68<$RI3Glyr5N!J(sp2!9-G3E~q0AmO?`4-ph!aLdB0mKdY*C%g%Pbf3mH(afn=@PT9xZM4cu0CZKdQ%Zbe1J>*}6B3F-WGnR9Da4!6k;~ z5t@v*5mKe~s|nuTj?ThN@o!UMP8R}C-O^Dbr5Ubd>wnM>CRQRKdeGwyF>Bq9LRtw8 zJt$$?;u(8Mcp>w90l_WjYJlm2`Y#;knyCSq$YGeiZI`2u{Wc|G4YhBb=ONVw$`Vp~ z)4?#OGW(P2k3jF;Pe(0ycdbi0ANqFj4#0j0qt@#nuxmi7BF3i6He}8;G1YZrJAG*b zB+0ZLR#OyP6Dl@H;5Kev`T840`5=Zm=~2850=|p^=oFyDC(YsH(gA=aAlX&%;;*`@gY0#!{z z0e`BRdiRQM1LeK?LF4&hO(M-Ip_})mo>QZ$!a6Ehhe|*GBO7Qs4l-~dY_2HV2A!BI z`4*W;B{BZ+QzX-84HBqvCLdW9-VfPbpd-!L9fKx_T|X7^+4`f;l~CpF z#BYrTL!+6H+SWHmrg`5Z!#z+ExrWp%Z+~*`cGOATm%1Li^tSAZ*}4s@?aqq*AOeNI z6@bbHH6=ub^VK{iuNmPp;OVn_4h_ed6_0cx&utC^Uog_<&s2X;V=RZBs$Ig=G94?@ zW!Xe08z3{0O^s1g@T!E*E}?Yc>Lb}7=NoG_#-SYvE$m0(&S031`4NuMZKQGZ!he{f z9ehv*XuX?P`dCcXIa^~zG9VtvFV&b*g4WM}n8X1Tb|R`f^q~XG!ED@{P+-#~j{S4O zitSs9kKK4b^vF4tOs(J$fFYs`n`}R^WmsNk7 zgS6LXd)~^tq5^$*$i^hJ=R-oe`u+TICVdZ`3naSVdEiaIBO`@Tm@p%V$2Op!4qwsxJ7|U3->lC%eBRvO zs!iM8G?mW0qWzG?sqX#GD1S+*E!D?&e|}lg1}7#X{cadT8nezI$6HMRKI@Y}XHY%` zo;KPs!v%6qLWzU>``d57eLZcLjBKp2>l)*Qx3234Gg&o!6O?SQoy^-p(FEgltficC z=J-J3-ijTKca8pX%6VIM!$?0c>J6mu+m6x`*YigS8>-Y0j-!15lYcLi=@?;vbBxYM z6yD0a#$nBr^FI5*V@9^>jmFMNO?DC5@mzxdvM<4w73wKd^W)@oXxqH3#IOsL0M`?i z(oRM`C4=%g{pp4ed>(jWVdITW(EGtUJrtR8-m1sG8!YOVvo~aKH=bu)Bd)Dvvlo6% z2ARKDA#~e1-J91RdVfY+k6_)0Di1w}YQNbv27~os4E<3|;{=UircW|I@!h;f=`&e* zM$T4FqJbM4rYYq#$<5h5*giM^EgLIyAJUO)eUwH6(fhOA8n^JC#5R52bTvOh6c)X| zIiO&71A38;<_QA&$&jM?IMXZqKQrH<>R_Nr#f|V7A8m=}}t8n%05-1^ZjHepE zVB{eCCVvnv#7uOW9A`2Zx9wMPIw?>)B0ba&ADXgUI#_Guf??LkWqn%37Fj~>D;mcg z`Y>~-K_b>i6h>9HWU45g@+vAdA6lZCWsT0Ht7vvwFfvOjt1q}$ksCQC?pjU~wp#B& zS}Q+%3B;WptjY!}JE#!(LAy)wvNbsy=!H>C>VN7~gf@=a0*FwUU{{}rHShLmk2i`L;>&Vb2d8l#mrs_V zMLxjYjX?$%byUxwVmQODax*ULRb@3h6?)2shF6sV`P#WW>TIPZ{9>H0*&eDDN$IkX ztABh;l;U13VJTcYQy-QIRaK^+2IFBL6GBW5SW7IS&{P)GigLzUCeM2my=9V6d_^)z z_iT47_X^Xc%qj(?GB)Obnyi23sjes3QV}=`7c};%K0Oq{%S%1gHqk^e(UFZ=P|l!V z5MSIZO{Nu@`a=3_K2X2|n(IFhal?y78Gj{dyF{M1GJsRj=N9gG8AW|$@Wpb@dzN7z znW>dKSegK5iqz&XxbqzrYfgUsPKgIl9x>Xb3F@duUWM?$#PwvDzsM9r>13l9%eQM6 z#p2EOsZtEdcLaA_a+igBV$q@r+G79ZX1C_7KQ~E`lf0i6unkX?zpw~Lgb^oQ#DB%8 ztk%R%;eIX*o)S6_teiB8W|{xF*x~DJ<|T;eF)r@6lqE$$L!_jf)hP$98DFa?1-&c! zqL=inBe6Sq+Gt!j+dxK~jMMZQRj~I7My#rxLG)IZnG!D_mBb3G)tJKNFVaUZ;^24H z46doz&{?u7pUBYGUI4)XpHh_#-+$E$bY~--`2-}8okM1Fx}+CUpuA}&(s4E-S-U70 z$W$le2X69JJ#+6rD4iKjHV)Ak_u^`f8nJ|f8ErK(h)!0<#34ZO@qixaSo0UkjDH|5YuXA4 z%PtC==rmbn&6=H7_@D%*xk8wj=W?8?N{pRGw>>*m&`8<`Pj5E-gO6lFt&)k z<%eSt{x3E*&{m5_-!P3g!e!^7Y+Xd`b2X$qJ&!;EC1QoQ2`Y}lZSLGUE4fq7mF(+@ zhqXJ{XFb-x*vikyl@Kq9%70|%F&B1xMKdZ~b6N~U{J6y?7^$|2>Efs{uzL?9wAlDUHq+bnrlY@f#6 z);~JbI%o9`WI`%3F#F8R{2xr*DnJz~%C+m0HECHK@$s`LyJelb)_({f6;+TZP6-!^ zm%?vPlqN%UkcPgpx@Pwog&#~H`(m;kow{U$PZas~OHuW6!IuLFn)!r99mna4LVSU^ zV&`{$CYU?xd1RjT6lqyJx}^!P4(JM$oT>|X{e|>Gtd!|sF>sveUF*Y^f`K*i0`}rb zha_PZSKB8S1Qvhjwtr~}oiDxVlmt07lqG_D`n%m;(GdZ6M{f4Of2|`;{DYYaS~gWc zbMr!8LH?)PyKRLd5745K;V(%q$|jQ&MPWeGS46jL{>>>LJ%X^isj|ri7rYZ6AM(9? zWeFYZynL;|iDi4@N(4P|;c~HD5h8PiEGbbxn-XXuCRJ16d4D8esC}Y1p*2LKx6;E7 zmX2~XQqa-p%v3VuQ9{wUht1^6+8X6$)i{}aM7a??k3{8VVOvL6pK>a{j(s|y-kcMW zR^N_|lM&@n_<4{KB5lfG5xddiPI8WCu#Jj?@vVam9l zX07~cA%LJXr6T9iR8Z<0Cn*yoE|??rB*Bq2zY~CqMfsdWs{||7)+Ep=6j|;nNg2cw2-TKPjbKTZDUuJ8&n|gnCU6`d;KjyJZJ*BOv z4thUx07>4s<-mt7PZQ9n%uyMClg{byx&_B?*c?NA#ocYj&c3z0kRYy08^ba*_p)r3Iyfgy?WlpD5vNYcM69G%eV{Yuq7AQ z9HD~4WX!!zBk6wbJ>7BKH@npJ;>=ZR2m3}#^-=*veO%*)Nh zJArgXnQ|<%iI_o&y39;a4pbqaY7`OzPXl36Qin-o$=$SIRe}+JyM;AkrJ~0^xk_Z!$%JH${DbhQx@#x9NJE%GIs%!& zCQh$y^!i4>Z9tU(j%?6FH>!s8jN8e>hz7b9vnqeVNj|IB5EanceU6}t@t|Jul?~#C z$5?fkn7G|X_m0QcSY#+pZ$x*<2!^#SR?H|jS+klFfU2U$^7I_Qtmv(oYqMGC_kH=E z^s|5F{gKL`v_ou?eC*$m%Rc|SYogsf`~#w zVJv@WOpR7c$A^aA_nKvPaUM$5T zFk(7KESXUi+T=-h4CWNPjv4BuG>$jXNAMk*(yd0rJ0QsXVzGLX(4%wk3Lf4K-Hm^y zE*_-Ts>b^Gnk8&18CMCrjCejL0<+pIT&e#0(5KIYS^lQ;)chz)Ko^9yksz!`D+udb z5k%*S3!?L_2%`JMT~qg45k&8aTSV_$5k&uq3!?wT1yN*H`6=*Orcq@XTKPVptrw`Z zZwl7l31}QGs$<6n=0?s4>o0g}#e#pMmkCb(B|)$Fjv%X{9qpW}?h}fOfbJ$20eCH? zT|V@7H@kdLB^nZDH(YpKR@`;1xhkkC>(*T9ujNWj_$Xvu)-qEYhJwMwc;)a){wN04 zDM4RU7f$|sUFdJ23;q6v0)wv_1U6^OdVhG2w0n=t@{b>9M$qqm)hMtrS3WBW^dFfn zJd_DMxH4>;9zIMM*qklfXhTujs9LOSX+NL?4E3$TFDZ!y{@$Sk;WyM0ze;FT36Jnc z(u=$3%yMm0{U^r%0b{CR8}kJ?005o}lkpWClkgy739=Lq5JnUL0H~8&Ay)#f6qBnI z9g`R$5R>5{8Ug>4{2@jHPZg6)6&jOXA`l#7s$m>vODRz*@%Nl#8tO9ci10000700#ia0RR9ZApigX09Lz`YXATM delta 6999 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 diff --git a/test-data/visual-tests/special-notes/grace-notes.gp b/test-data/visual-tests/special-notes/grace-notes.gp index c67b6f1631364d5e14ca1b0b13b017b5b8504870..13af4dad653da6eb59313c5cd33e7a26142b3282 100644 GIT binary patch delta 8039 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 delta 8006 zcmV-MAGzSKMw&*DU4L6kZyZ;4u5Q{Rk1X4yB~pAzYEf!g8jr(>oB%)ucfMP6oa*tLyDv$&PJcqT6A;H)eG)_+H(2k- zZkMzMZaivr-GJ=5-871;kALu&e>EqbXpcib>>ouQsW^`F+IlN>L(h%9r%~#reiW{! zu^T3Vn-Y&ddN3TpEOOYXymjn(>+s(`aXk{xI9KcKgZANWz1Er3>W$O(L91P#YfX}r z4A%#~M-C^k-+xUUXWrPrNtF0>KDr4tblgqdm*gb&qu5U;Fm&mS`?>uEq?hi&3?$a3 zX+5PARTjiVqX5h>Bw>2w#(keHa{n#9;q|uL>Ck<@%l_iAZMPfE=I&|zx_EsrCZtWy zQ*9?#KE09K2|ePWACi{;Q&QdfiQ~v68gc3;>5TJ+w13BvnE1r+zG!u0ccdS3=EXIb zy4PFxV)v{S9EYs{%$7KnIcjP8LuGBpxs&&oPxgu5AEdkIBk&yjsQTzr$63xjNM~x2 z(1V$m_o66;jh?uD@^m}|do%*SA5x1^TUBr7UhWW=o%OlzrGx6DufP6gS)6I;hki4T z&Jq$EPJdkzak3qaAOc{2#u63z`t~4-J!-)tKM4FGfo)YAHOF~?n)}2B)4D;6bR#-A zVWxk)xw&}{ya_=&j){6cjF?&JuJ@w26}ZU&!tl0O_sQ5#-ME#~DB>p2TvGjqHFWtS z_x$4>^3rENsXhiX=Pf0pf?J9{Gb_S^I-n7B#(zVnazp&+IUGJ|gx=9O@w=uE@&=&q zKOaN^IVDMY9PSQB>7?n#aHwlCx5#i5Y3F!*R;E@mqQC&wI`Pj*Ko@v@k$S&H((!10 z1b;h(yyEG?>_4Y%nx~B8tmr7S2j(_FX8zf;D>BFYG$1q1B>@d<0uB=Jb=roPUp#e( z}Qk z)Bo{2n{nQ*pEREA*4Nn|t@?Fg5PHHR$bX-q8}M-XF(j58+&xcWn0Vk~8c*Qn_gN6H zdwv1{HvyDNdHf#tTJZmXhCWFSLiUv7tcjEMGAnccW|_tkHIEbkDbKmxAAPa8Dfi=t ztu9zmC2X~^vbnh^7Gbd+k4V4oM~xWZz^Sa7@pS^ek6k|%9^L+6=lSMnf%t^LP!%0%MEyA3GFG`N@XDEX)x+R#<3K zdsZL+96%#C7p-j15)zOkq1l*ZwP%mSLpOD`gM9xdKggp~>UK^ClXNgVk+tf>$nTPe zypFK|qBf;}QSs$euA7H$M43z13>^EOBr~w9pGI_%0)Gf|Zir)y z6T*Mgg4J4N ztl4+tVH6sJZ~Td5A}P?DHf4Iu<86QgilqOAAnCYI?Zy7F6Q!rF=Z_P{Fs2XcAF+aV z7c0>M+_VB+M=PqV_&#CIC4a22E-IYmCN#Y3EDF1}#+{VbBh&ZNS0Ypzy&mbNd*I%L zVjD!iESxEXYo<}iXN*$#jZ0;v%8cfOhx zb9W=pZH)pSQvOcfYyePQ!VT?ro3I#EdU>1=pU^|hI5&S|J*MR&27e30B#FlGN&*Il zP5esovcI69H$648@wI=uTgr49Opb@#0S2evj)L(pWJt{%KF7m7CL`jef(}{n&WJ)5 z?`OW(Csli9=p)4npweko^dfK;~>#P9QBtCy`MX|6CqS zwQAh{2^M=$^p1PIgrpx;e++0S^S=lCrQU3KzcWr!nibVYcYbmC0@u6e%=NU_xsRO4 zJ*WMJ>O*ACY+=Q?7r1?e(~l3o{-&n91-^nNuaWM$-GRVSpnvL+3X;sa!D!&N#{E82 zUgEK!x+<%$YXrgT*OttR$+(=x5*~>6fVU-4d^8SHAHcZna>WeKUu z8i%wIa>tag@PEIuCIR|0S^OYesdFLvfb8;qV%Da@GtQg!?c~T+z!qZ8aK) z&1XmTd_P7Zk3P$GiB>ICQD`@syiTAr(mj`rNi8chs(*mXhR&({a2oG|<#*!oP%94m z;H)-d2~CP91Y+Nc<723VqAD{pT{Re^Pzx$GBWhUTJP7wO0@*T=6x*46xfQQmjq|kX+YF#j+Qjfsa!QTnlX=jF4K7hhlcdi znTbf?cPtV)<6N${o;A6yF_)9kay;Vwd`#m_m%tmvF8weeF)Pt6@E7wa^VKb3sOJNB zIDe$_&xd}8wikNQJ6}~*9>At)bdeM(4!KB-<`6bS%^) zVpo;I0->pkYFAeE3dv>RXQPD0*1RqpnFUfV|J)tu3f)In75V@F3pQ40Z;#i-WI_fjUt&x6@*uf!-Tnp zc&wY!XOOD?j^rE=#j8etV#^s@fcW!vmm$vj^Griv;XmWdvOk%IaP+Kouw9pk$W@>m z`qJ4~@{Tb*I%n6L|Fhq2&hOBtZm{hw8EoaZ#>0`pRq|^F1b@&t zRyP5Rj+)h)wePHBS}<-Q%(^hE=ad50>qfF3C|F>xtm^K_*Qc)>=NhIo&p3-*9J*Jt z9lT&%@0c4@vZV|A@W?rhy7pwm_jwD^g=kCPf;V=evoPbZr*6_8!}L04UHa#DtY#j+ zS-Q?s#-MDs5NJ+&(sGf2h2{)D&xh125H`SDSP{315 z%fhzp8Up;~`zA4y5>{U1uoP=1E3kVOBz(Jm+y$6q{l~r=^uVp`UI17QE*x&aiijm> z)nvK~%@`(#X9TTHx`WXF-LaNQOG_9RW?;z#A*J-ueRbUM#rD7j7wOsacYn)9aaxP_mD4K#(vNu_iwL`*a=!aaSU9>K5EK$*> zU%D^;2Vr}J(PSys=?2Io9!|UTIND#v7(1u)ye-DW`HigAW(8r#cYph_JJbdBzpo)U zAZjL1cX225(YyH?ZZ(Bid$)nz;wb^@V+InEK%AN^SR+h-EZaAoA6&`S-l$6_P^FXK z8LayNoWR!|V@UKO>j}H9f~oK7qiXSFeG~%)i|KZOW@LBM>@igf*J<+2IPY!^X~}d0 zI!eD1xc{K0KW`LTwSTV#{Sl^Fh+S=EO`kjttF3%^OKU>eaAp%V^(}pzk#6feibC+k zSwozyek-?m`}KSJ6V^2jH2}U7j_|ViC^p`zG5Zhzoz7n1Pzn`lNVaP`nUK7On$kMY zivCbWIEuHpkdHSgiC%U|zy?mDQSlT;26xnjf&RO8p>dlHI&&`IHtv#eqUJZ^+xQw!3`_#RIpEJ*AJl} z(P32&RH)1wiJzJDU#;ZWANLEeM1Zu&o0{XiU%s+sq5KB83k-)V9wP=9?C?T&##6q- zlB+1eT{W6}xT9FxoUD71)dCnKw-mPK+Ed0zwurVKNgQvRG4C zKA%g}!d)0x&2hCX>$xOIb*c>kuyOhc6+wGom6HwY6mmWpW`S3N?^cG-O^2M1^q=GmVo{&A6Jb0PX|t%GNDK=h_G%?qmHoZUPkc@wWsLFW-loY^{J&17@2T!3Fb@v z(`TO-lzPq(^JrSgEd)-NIak?Tf;qzA`MO5hY1B);cvtG7{V3x&H3Cn9$!L%TfJsS2#lev?jv`d`m=uS^nL%O|aujs|Dp!l} zi^oZsJg1ypNZ9xsCdONuz;qbKlS_Ii$5w@ha013|O)~*7`#41YmKnlRr;}~%vwv`d z%-XGextelSE8E%kD0hv|YZNBz38m~My_-o23p6fXV_lx|VP0WCgcD)Q>1d<|3rLky z-A+ljfP{}-OpsFQ9D5fms18Yl4)eZ)0~$)~_q&rIs=*M~f^f7+YTm0qE0t% z8S*-a3WoQJD?*vyIKP}u)yT*aKc~?GTLss;Fj%qHJJ zOhl#1;vYd|4X?i=z&|XV?%|X-FS$gT_wWn)lEFZhwnyH8D1oz7_*1uT4_Sp7gqp@lW5hO>g^iHz|NE+Q#q zU@hE@b5Y$qrRgx8DKvJB!hfOSH2CETV^uuszu4T&-+n213{B_hdKwEh%Z5_ zf0qdR_1d@2c1c-i=XJZ%3!Ssn4r}FC-+aBt|$<3UV%L*_j zL(`FeyO>QA_)34{7AUzbE8N3c8A6~@sVY3OsOgvKLQI<9GGwjzFn?%E&ux8?I*(jx z%e!kjaJvMFIAgUoep4Bpa7}aH^m>1vQMQ3OF!k z^~pvEZUIZBEXx`04!t^FSW5BiWaPS(5;75>EMn;OfKmn#bq<%OP-4DpMIvj2(9aOe zSXWD|l^Ik{R4YzK`F}`WX20l?k~FzJAlq*-W`RE51MMs$;z99l;#ljlWRc5Ve8LIFv5Kxg(qsl6L%uRBVV@+>&YL*Iy-2Wlp$S@f~ z<&5!lmtJd2@ls$aA``ILFZ#xz(3S5Mr&&27Ww+>v5pWP_V^|ypqfPYpnQ_|W8R#q& zlJdSe`@F*lIC@jThvq)}9RHT{;Z$Exa+jFjIv}+Nl{6SzD)bG09==|QAg+v$d_`6I zbsK;2FK`vEaF_oJ;J!{H_Dlc(Clr$q796w46np`H>2ljR68^8Jz-TKwyH%@D)MdqH zI3=H>8avTg&QUux<$_4a!iJYgFo|Ys-+j9Q9w05tijz389V<401{z0y-Hk?zv3~jJ zd*nTf6CMW7o95GYld!-ET^?LKZ>D128a98i8`jZed?+8URabkED!&~V_D5%#b3txcqge1n)Y>y5w0g7DuQy6s!+I0O zZc=Mgw1#z(CfupDDO$!i3fxtFs%;HxFN~IdF~3;U7g*9^|8zEEaa{n4*s#VyBI49R z`PCO&X=+$6LctwY@03#;)*+7*F`*aiS4LfZLTe#>&$bpowk@9tN&@P$=grHQI}5=+ ziY9TwK(Ii7Ry2uWTZveDjEH3fy|9DfBuUeb{zW`a{!2bAxL~a$q7K_8QOsH&VjAs# zkpEeR^Fc$|F&*Ek=n@{5l9<)RlZMUP3J9&K;3K9Ah zlE>zvLXfa2O6yXzW?tyLYjLod0H`~E1jSKQu~TJZQyL^>%3?mR?x_uXg7t#Tf=`!7 zw=cP$oQ={Uul-cSZsA!i%iZ#9b^W zlg1e&VV+M#>hcgSe=MGz0(7cAx?x8AY&OI29IQE7aOdE6v%L#;ebZk0oBnPx|F~_Q zzYe|BXK-no(4bkH@#)rJ#ZWhC-TrhU`=7VlUsCrn-ctFLHsK<#)2wxCGw)<={SA{# z8YzE-v8eV+o?fI}JXINoq8TssUKrb*eqU+1s=^4GQ_X#97dTgti_TfyEV>mPCe-s! zQo*FW^D>Y&S>yX0b^9_D*5B2UTKP2y#T#HSkU<#7l$G(D>8AyF!D(3AS>;9s2_Rl zSL)4+%9};#F_~7$c<>Bx76HFZ8NlGEO#+4qcNrc6SK2g&>C&Hto~?DuD2PgwiW7hC z@)xN;L$`zZo*JoPy-Wqrz)YlMpihmE_b9n=^H*pMl`_*rXVgV&l=vAMszyzFq~Qfg z6eiMA7O^yO2WKrSuqsE;_snjA9%jXcJk<+MW%-#3qy9!^?(?8OxZzM;c z^1>BAK61h|0gcKW75RsBPXE;X`Z1j`Z!-?n6%|V?Y~?eVYt%Rrqv{%EXV6#h3O4v% zpvWS`Z{z(j&OhBnk>Uers&XPLlQ_HpplnR9=Vd(X6rYk#;qYJ@XJPNRR;Mw5W)@G69RvsGfc@R8uM~jUsD?)?sbm0ewH+!AU zM(+nRn$dpUofCrnB#D>am( ze1yD)lB0^4-m@eRos`Rp7z75Am{pcpR%nk#;bF`KiW{FewtP0Edy`$Sa$ye{EXp8V zMI)Uac<&-Gxts_WV?-leIkPH@o+mwlcF|1{X_9spJt)^EixjKVh z&ei!8uKumK2Dg9W+FH+LRE1;c@EH~4%SV|=+4I=kK7x^D0pm#ddO@4CO!W_=$?T1T z%ocJ`3c4(mL+&yva0HWdNSE|Tp9~1Ze2U!2#w!X*!J(ezI7gtq3@_%1z02khh+wm2 zXk;sk3GI_Z%gDae6aR4SSJ4OXF`9C&?uNM{ zh!A73dXT_nbMPK6=8&%MrV=8 zcQH!>Pwh%?>z8>u|0=Ire3O@Dx@>KqtFnGYx~{WHx(<`aT8gl@wONW#B~p+v%R^&Q zyU0kdN$6FT_1049t(8g*d<0p?+Pq_|_rA=o)?t6$y$#mGZ;JKCQt5vV)}1@XdjIQV z-M%Vl}Kh@8G)~e1V{>2P9FsO7VhP~BP9rB2008!rp&?fRkCXW!NCMy#lN%KqlU^b! z0x%VmYZV%kq#_U;Vz9Tb*a`puCO`lH5&!@I0000000000|AF%rlh7hQ0SA*0BN_%h IApigX0IuI-H~;_u diff --git a/test-data/visual-tests/special-notes/tied-notes.gp b/test-data/visual-tests/special-notes/tied-notes.gp index 8e6fc74933d7d09eededad4eaa656669741166c9..4cb4679181310ba004ca6a109bd6a3d12dceeadc 100644 GIT binary patch delta 8323 zcmV-}Abj8RN4`gpU4LB7ZyZ;0?-{OFURjn&OO*H}ilR8Ov|fjixB-G7D{+P&A_Gz+ zI3v^cA=sYjH!~gebWgf_M9!Z42P8lc1VOZ?0LdX=K!VtZ9CFx04h~=gx$Px~Ajm0) zU=MLl0hD^5{od>9=4f-UM6kPG*Q@%~uYOgpWyh%=%{RwMN`D6Hi8~-o|0iTOit9np zaO1>ruI;=e;kp;QXY_~NC`w7}RIWb_qP82XKaJfn@s5UW$4|%A#|K}3^S-!p>h_Og zKZ@b^700Q5a#Os6u5>Vt{Z8_HnD`!XocUw7N17xZ4cCY8(}~~fr-yFb^TTR=#c}R8 zQ#bV7*n1YGZhz`W;d(&2>8>C4NDO}*M~P2=+k6JEaVp<$x$VGBM=?>ir*8YCKTi9D z7wa9$$59bWKV7bvC z+=@nF${ch{#H}5>ofjl+ko1g@@L97SdSI+mc~3m;kv8>S44cULhAwdEho5efmp=PV z^~uJ@hJSQD;OyCG&?a#+9S4NIR2kbMgJGl@dv*GzxU%QQgD5n1^7fyYJK6S=Vc?Dr zBabawRf~edW9_*sOLEc9C{ChyKTJrR(mY^~&6y6^IZsLG$weKxiF&64z|vNAyt^1i z_83NX&WCQ8P)9ueJliceA|~1r@3bDEt~_?*)PHw_Ch0`<;+UGsJSq{}21|P}gwW&Q z==90!YkS1?NX$Ul9JNzF4Tw`&k*FZ)3An7)ho^e|Xr%Atd;f&MvO(NI0-k~lW^jZ& zHJo@j3Q~U<02~9-p-=3GA&I#;0MJK2$nC5f#T~K-Fa1drrfxuA06erEj|PcTk#0Wo zy?-7_PhCHyQKZE3U+Z}{$KYJBmv|fq`vc&oR9gBQiS}mT4v(Xuc7N@= ze}04VFZ{+4!+Q9*Q^^}OXB`V1}SF-bYY?uY6w z$C=X@;S~0f0Hq&}62J2%RrDdNx_>fGM=@;0;-R_cN zXx%&wD}TEx?&$h)lJXbZkYt9;i0r4~;Bc67uGWt0Pj_nT?5}2RT7!guf<&ns1ko8| zbzsO8D0x+iM#zD*MT_Gzi2YHxo0;KM@&ybh7NOqWXJV87p^!c0yi?mcI{x%z|LI<< zww&dB(x$61hp zXAIAxtG%r9gS&Yku|mdk#qTu0l#It1a>=>A#Ffw23W<;w_CxpFAB+ao%^zc=qTk7G zSv2fz!S;ypw*QbwKJB}M!5FAb&(;6^2p6C&pU`)b&?hNN+~`{2nRwFia?VL-I!-3LJu83?gXUHRMnmvbb%~S z`w`Vp?+WXAdgXFzMt?w!ZkabenLar7J1?4@*d6LzHuXYQ`c!5W)c{S{ijc=k26}DS zZi34VT_Wl!Ja|99uYr5s0F|N?siYoQWLhdZR^_C4$=B^RNVTkPQ>K1T@Q4(eQ_kgD z^LeAS-#XZ-ttdGKVhUKdp6*ZbH&e4I$nPAXfT&PZsrpzwNs~*8`n&{y~Wmu6DI+@9td@-e5&`%9&<= zue8T2wbP@M?Pjf@VRFy)h6&7*s68<$RI3Glyr5N!J(sp2!9-G3E~q0AmO?`4-ph!aLdB0mKdY*C%g%Pbf3mH(afn=@PT9xZM4cu0CZKdQ%Zbe1J>*}6B3F-WGnR9Da4!6k;~ z5t@v*5mKe~s|nuTj?ThN@o!UMP8R}C-O^Dbr5Ubd>wnM>CRQRKdeGwyF>Bq9LRtw8 zJt$$?;u(8Mcp>w90l_WjYJlm2`Y#;knyCSq$YGeiZI`2u{Wc|G4YhBb=ONVw$`Vp~ z)4?#OGW(P2k3jF;Pe(0ycdbi0ANqFj4#0j0qt@#nuxmi7BF3i6He}8;G1YZrJAG*b zB+0ZLR#OyP6Dl@H;5Kev`T840`5=Zm=~2850=|p^=oFyDC(YsH(gA=aAlX&%;;*`@gY0#!{z z0e`BRdiRQM1LeK?LF4&hO(M-Ip_})mo>QZ$!a6Ehhe|*GBO7Qs4l-~dY_2HV2A!BI z`4*W;B{BZ+QzX-84HBqvCLdW9-VfPbpd-!L9fKx_T|X7^+4`f;l~CpF z#BYrTL!+6H+SWHmrg`5Z!#z+ExrWp%Z+~*`cGOATm%1Li^tSAZ*}4s@?aqq*AOeNI z6@bbHH6=ub^VK{iuNmPp;OVn_4h_ed6_0cx&utC^Uog_<&s2X;V=RZBs$Ig=G94?@ zW!Xe08z3{0O^s1g@T!E*E}?Yc>Lb}7=NoG_#-SYvE$m0(&S031`4NuMZKQGZ!he{f z9ehv*XuX?P`dCcXIa^~zG9VtvFV&b*g4WM}n8X1Tb|R`f^q~XG!ED@{P+-#~j{S4O zitSs9kKK4b^vF4tOs(J$fFYs`n`}R^WmsNk7 zgS6LXd)~^tq5^$*$i^hJ=R-oe`u+TICVdZ`3naSVdEiaIBO`@Tm@p%V$2Op!4qwsxJ7|U3->lC%eBRvO zs!iM8G?mW0qWzG?sqX#GD1S+*E!D?&e|}lg1}7#X{cadT8nezI$6HMRKI@Y}XHY%` zo;KPs!v%6qLWzU>``d57eLZcLjBKp2>l)*Qx3234Gg&o!6O?SQoy^-p(FEgltficC z=J-J3-ijTKca8pX%6VIM!$?0c>J6mu+m6x`*YigS8>-Y0j-!15lYcLi=@?;vbBxYM z6yD0a#$nBr^FI5*V@9^>jmFMNO?DC5@mzxdvM<4w73wKd^W)@oXxqH3#IOsL0M`?i z(oRM`C4=%g{pp4ed>(jWVdITW(EGtUJrtR8-m1sG8!YOVvo~aKH=bu)Bd)Dvvlo6% z2ARKDA#~e1-J91RdVfY+k6_)0Di1w}YQNbv27~os4E<3|;{=UircW|I@!h;f=`&e* zM$T4FqJbM4rYYq#$<5h5*giM^EgLIyAJUO)eUwH6(fhOA8n^JC#5R52bTvOh6c)X| zIiO&71A38;<_QA&$&jM?IMXZqKQrH<>R_Nr#f|V7A8m=}}t8n%05-1^ZjHepE zVB{eCCVvnv#7uOW9A`2Zx9wMPIw?>)B0ba&ADXgUI#_Guf??LkWqn%37Fj~>D;mcg z`Y>~-K_b>i6h>9HWU45g@+vAdA6lZCWsT0Ht7vvwFfvOjt1q}$ksCQC?pjU~wp#B& zS}Q+%3B;WptjY!}JE#!(LAy)wvNbsy=!H>C>VN7~gf@=a0*FwUU{{}rHShLmk2i`L;>&Vb2d8l#mrs_V zMLxjYjX?$%byUxwVmQODax*ULRb@3h6?)2shF6sV`P#WW>TIPZ{9>H0*&eDDN$IkX ztABh;l;U13VJTcYQy-QIRaK^+2IFBL6GBW5SW7IS&{P)GigLzUCeM2my=9V6d_^)z z_iT47_X^Xc%qj(?GB)Obnyi23sjes3QV}=`7c};%K0Oq{%S%1gHqk^e(UFZ=P|l!V z5MSIZO{Nu@`a=3_K2X2|n(IFhal?y78Gj{dyF{M1GJsRj=N9gG8AW|$@Wpb@dzN7z znW>dKSegK5iqz&XxbqzrYfgUsPKgIl9x>Xb3F@duUWM?$#PwvDzsM9r>13l9%eQM6 z#p2EOsZtEdcLaA_a+igBV$q@r+G79ZX1C_7KQ~E`lf0i6unkX?zpw~Lgb^oQ#DB%8 ztk%R%;eIX*o)S6_teiB8W|{xF*x~DJ<|T;eF)r@6lqE$$L!_jf)hP$98DFa?1-&c! zqL=inBe6Sq+Gt!j+dxK~jMMZQRj~I7My#rxLG)IZnG!D_mBb3G)tJKNFVaUZ;^24H z46doz&{?u7pUBYGUI4)XpHh_#-+$E$bY~--`2-}8okM1Fx}+CUpuA}&(s4E-S-U70 z$W$le2X69JJ#+6rD4iKjHV)Ak_u^`f8nJ|f8ErK(h)!0<#34ZO@qixaSo0UkjDH|5YuXA4 z%PtC==rmbn&6=H7_@D%*xk8wj=W?8?N{pRGw>>*m&`8<`Pj5E-gO6lFt&)k z<%eSt{x3E*&{m5_-!P3g!e!^7Y+Xd`b2X$qJ&!;EC1QoQ2`Y}lZSLGUE4fq7mF(+@ zhqXJ{XFb-x*vikyl@Kq9%70|%F&B1xMKdZ~b6N~U{J6y?7^$|2>Efs{uzL?9wAlDUHq+bnrlY@f#6 z);~JbI%o9`WI`%3F#F8R{2xr*DnJz~%C+m0HECHK@$s`LyJelb)_({f6;+TZP6-!^ zm%?vPlqN%UkcPgpx@Pwog&#~H`(m;kow{U$PZas~OHuW6!IuLFn)!r99mna4LVSU^ zV&`{$CYU?xd1RjT6lqyJx}^!P4(JM$oT>|X{e|>Gtd!|sF>sveUF*Y^f`K*i0`}rb zha_PZSKB8S1Qvhjwtr~}oiDxVlmt07lqG_D`n%m;(GdZ6M{f4Of2|`;{DYYaS~gWc zbMr!8LH?)PyKRLd5745K;V(%q$|jQ&MPWeGS46jL{>>>LJ%X^isj|ri7rYZ6AM(9? zWeFYZynL;|iDi4@N(4P|;c~HD5h8PiEGbbxn-XXuCRJ16d4D8esC}Y1p*2LKx6;E7 zmX2~XQqa-p%v3VuQ9{wUht1^6+8X6$)i{}aM7a??k3{8VVOvL6pK>a{j(s|y-kcMW zR^N_|lM&@n_<4{KB5lfG5xddiPI8WCu#Jj?@vVCH`s zA|VS6UnapMYN!9by8s^`ZOc5_@jHr4V6ltG?qXk(ZT#}xbIDg4#Vqi5n)=&zlThCd z9Oj?zG!s5=4V%B14dZAsJ`|6S64l%=w4#Fpr}Qhs4vFYR!XoOxY@L60M{fea4m^+g zP6q2XO?>omii`~AI7ru3n)@`iBNlQ*IGVtkR}C}@Ftn$35K(xZG44{+`04k({n6Rz z_dotH4NbxTCz)L}oP!(2DB>*UmGKk^qwXy6s)GX7Fg^v56IaG0tYMraF|#XU5|+}9 zeCH~h@>s*z3&Lf@&KG~x4Hj@XzcriDsLB8dY#3ud=22oJ|EilU4K<8+0cSR?B4yBq zamb>WPpotLE43VTL1V!^*EALYHVuz*i};pDcbXRwvlpCx=S^YG-AGV zDdEcyun_2o%AA~&Zf1}94tzNsGA>d?Neh_(< zyWKR6kXSA|hwEa)=4sT-SM#jsocS#tgj?5<$Wdegm&=UkuHhbpJRg5vGlYQ4r|Ai?qEN`25PrVV z#3O!llT=d~HjJx0zCbO>{#EQxTI?l>i@q^lf@tc>u!yi-&OQbZo0@GAT<6_Jiik)SEE}Cgmi+|- zWqihF8=`+>*@E~!0nu1l1YGnG8??|oqh1&QKDHaiG4rVvnRCmHVY6wkVeGZk zCPB=^3;@a74dWx^J~Pl!2)KbX>%l4@+2Y2W1aO-yPGty>LqLhF!8D3=fKYVcgr%)& zOa)W>Kw9~{>EGJeR!!5+i9Kl5eYG4+D z*W01^*@O20-hF(d&g58_n2A-Y%XL3bdE&4Dl0O>FPC<0CKe}N>eAQcF_!(|n#iNOEdZr`QurL=|e zNo{|^O5r9 zvo?TTYsvicsqmDk;RXa1+Au!E^u15_7M6eSQ+Gn6DUV=O+@mqL>al}XIBjL61rMCk zl=6&6Q%#M8pivC0}Sqm;0)kY02xL>g@?ZcYsgxe!aA+WTCI?urbtz*XpgvYejEm| zxG9TB+-)0IEjq9(n_FM0*#bRGn+<>A&T~q6?#{SAwv=RtpP$v~rh9t??&j}H9U z$n5_BNA#ied8%I+u5c2yExZ1})^pX?I`^}+VO`6v3bU~4he2dhM`|mogW69GK%6x$ z8Ss%EBr#}IYN*Ixg>m|uYS53Z8FlMXNK{lTzA&ZDq>fghh_$k56v&{jU=@E%u)6>e zO$gk^`(s>xx{EBu2f$?KM06%ma1Mepv96xA(aT9X$(`Kb!7}#3+;54+6+?FMOv9|8RP}*Qqyq z?@|an@@9SZd#5W%8|&Sf;x z>4Ejm1C#4%;Z|{Gx$A!|tPo2TJ#?+}SY(}y3)YB#;2vdnJfuAR^e~~j`^-YOw#JGnWt}z4Apxi=S}aG60ko3dYMFmFYq@^k6z>T;`y=Z| zGJ;YLQ78D=z9yL2#yCWrzg}RLWzUiw1+Z3X z_Ou>;ML>vH>{WkqAJKj*N&L55xzLyEdZ(v%H`}_X2#jGbL%e_DivOnQ)s=GA*2F;s40EI)+bz?UeRdo>!?1R)cM z_|=p64xNLSaIjW*J(?^;2`eTWtK+RSfS1XcOyEQW;)2leqnhU-ip~=k1(<^8B8u)47e)WM2%`7I1tA>c^AJVe4T(Vvay-gxTr=n}n0^r!AM@(d(91wM;(7kot}KEfVfq<@_}D)CG+{+CwyfQ2bEUVED-|_Cbx^fJ zZ{Dx0_wVLZt7P3@L)QKFnzGjKMAo&r(!Y(YJ2fnT1ic!77h?dr_iO;}=u~%Z0Qzgn zx^sWOvc8o8=v56s>hE7Iz)Q9O{YM)Z9{zZ((AUul{Xw;&Hdk(?6@z>B3wuA_FRWz& zh7TGT*5=Bs{KCd#4Gdomz{44U;XNCGJ37@}8-V`0A;8@PhPAnJD+93kXamDn3-E9j zK!3a?!-F4hEIR8Li_U`@i`rbdm9fzEN2`ApyFcDqtfLmajRy@PYjfpx)}l^%@sV4L z_0^)*ce$%-v2M}%Zk)&++0dKRqWfrLi&rP|fKKG`)*@e>$OAf&OU1}XqZY4Di?xg?# delta 8361 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 delta 7780 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 diff --git a/test-data/visual-tests/special-tracks/grand-staff.png b/test-data/visual-tests/special-tracks/grand-staff.png index c14b547326889c96341ed25ede62bef9821b9b67..4bd76fe5cbe4cde4fc11958c36fb0faa51059475 100644 GIT binary patch literal 77934 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 G!T$?6^m@tw literal 79548 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 { let score: Score = reader.readScore(); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints.length).toEqual(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[1].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[1].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints[1].value).toEqual(4); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints.length).toEqual(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[1].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[1].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints[1].value).toEqual(4); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints.length).toEqual(3); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[1].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[1].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[1].value).toEqual(12); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[2].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[2].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints[2].value).toEqual(6); }); @@ -142,46 +142,46 @@ describe('GpxImporterTest', () => { expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints.length).toEqual(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints[2].value).toEqual(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints.length).toEqual(2); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[0].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints[1].value).toEqual(0); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints.length).toEqual(3); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[0].value).toEqual(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(30); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(60); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(60); expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints[2].value).toEqual(-4); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints.length).toEqual(4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].offset).toEqual(0); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].offset).toBeCloseTo(0); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[0].value).toEqual(-4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].offset).toEqual(15); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].offset).toBeCloseTo(15); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[1].value).toEqual(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].offset).toEqual(30); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].offset).toBeCloseTo(30.6); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[2].value).toEqual(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].offset).toEqual(45); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].offset).toBeCloseTo(45); expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints[3].value).toEqual(0); }); diff --git a/test/index.ts b/test/index.ts index 452ca3954..3007d2412 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,2 +1 @@ -// import '**/*.test.js'; -import '**/Gp7Exporter.test.js'; \ No newline at end of file +import '**/*.test.js'; \ No newline at end of file diff --git a/test/visualTests/VisualTestHelper.ts b/test/visualTests/VisualTestHelper.ts index f94856b50..9c2362e12 100644 --- a/test/visualTests/VisualTestHelper.ts +++ b/test/visualTests/VisualTestHelper.ts @@ -347,9 +347,10 @@ export class VisualTestHelper { const jasmineRequire = Environment.globalThis.jasmineRequire; if (!result.pass && jasmineRequire.html) { + const errorMessage = `${result.message} (${message})`; const dom = document.createElement('div'); dom.innerHTML = ` - Error: ${result.message} (${message})
    + Error: ${errorMessage}
    @@ -367,11 +368,14 @@ export class VisualTestHelper { dom.querySelector('.expected')!.appendChild(expected); dom.querySelector('.actual')!.appendChild(actual); dom.querySelector('.diff')!.appendChild(diff); + VisualTestHelper.initComparer(dom.querySelector('.comparer')); + (dom as any).toString = function () { - return result.message; + return errorMessage; + }; + (dom as any)[Symbol.toPrimitive] = function() { + return errorMessage; }; - - VisualTestHelper.initComparer(dom.querySelector('.comparer')); (result as any).message = dom; } From 32bae456ddfcca678cafa2aca43ff05f81452b60 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 16 Dec 2020 13:30:24 +0100 Subject: [PATCH 18/31] WIP --- src.csharp/AlphaTab/Core/Dom/TextEncoder.cs | 20 +++++++++++ .../AlphaTab/Core/EcmaScript/Float32Array.cs | 14 ++++++-- .../AlphaTab/Core/EcmaScript/Float64Array.cs | 14 +++++++- .../AlphaTab/Core/EcmaScript/Int16Array.cs | 13 ++++++- .../AlphaTab/Core/EcmaScript/Int32Array.cs | 14 +++++++- .../AlphaTab/Core/EcmaScript/Uint32Array.cs | 36 +++++++++++++++++++ .../AlphaTab/Core/EcmaScript/Uint8Array.cs | 18 +++++++++- src.csharp/AlphaTab/Model/JsonConverter.cs | 7 ++++ src/exporter/GpifWriter.ts | 8 ++--- src/importer/GpifParser.ts | 4 +-- src/io/IOHelper.ts | 3 +- src/xml/XmlNode.ts | 4 +-- src/zip/ZipWriter.ts | 10 +++--- test/exporter/Gp7Exporter.test.ts | 6 ++-- 14 files changed, 148 insertions(+), 23 deletions(-) create mode 100644 src.csharp/AlphaTab/Core/Dom/TextEncoder.cs create mode 100644 src.csharp/AlphaTab/Core/EcmaScript/Uint32Array.cs create mode 100644 src.csharp/AlphaTab/Model/JsonConverter.cs diff --git a/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs b/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs new file mode 100644 index 000000000..b1d79e027 --- /dev/null +++ b/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs @@ -0,0 +1,20 @@ +using System.Text; +using AlphaTab.Core.EcmaScript; + +namespace AlphaTab.Core.Dom +{ + public class TextEncoder + { + private readonly Encoding _encoding; + + public TextEncoder() + { + _encoding = Encoding.UTF8; + } + + public Uint8Array Encode(string value) + { + return _encoding.GetBytes(value); + } + } +} diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Float32Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Float32Array.cs index 4e43b3836..b7c87433e 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Float32Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Float32Array.cs @@ -1,12 +1,12 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; -using AlphaTab.Rendering.Glyphs; namespace AlphaTab.Core.EcmaScript { - public class Float32Array + public class Float32Array : IEnumerable { public readonly float[] Data; public double Length => Data.Length; @@ -61,5 +61,15 @@ public void Set(Float32Array subarray, double offset) (int) offset * sizeof(float), subarray.Data.Length * sizeof(float)); } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)Data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } } diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Float64Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Float64Array.cs index 05c0b1789..5266cea5b 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Float64Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Float64Array.cs @@ -1,9 +1,11 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.Runtime.CompilerServices; namespace AlphaTab.Core.EcmaScript { - public class Float64Array + public class Float64Array : IEnumerable { private readonly double[] _data; @@ -18,5 +20,15 @@ public double this[double index] [MethodImpl(MethodImplOptions.AggressiveInlining)] get => _data[(int) index]; } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)_data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } } diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs index decb35b5f..10c6b6b35 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs @@ -1,10 +1,11 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace AlphaTab.Core.EcmaScript { - public class Int16Array + public class Int16Array : IEnumerable { private readonly short[] _data; @@ -20,5 +21,15 @@ public double this[double index] [MethodImpl(MethodImplOptions.AggressiveInlining)] set => _data[(int) index] = (short) value; } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)_data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } } diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Int32Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Int32Array.cs index 993a37cb0..0960d57ab 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Int32Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Int32Array.cs @@ -1,9 +1,11 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.Runtime.CompilerServices; namespace AlphaTab.Core.EcmaScript { - public class Int32Array + public class Int32Array : IEnumerable { private readonly int[] _data; @@ -36,5 +38,15 @@ public void Fill(int i) } } } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)_data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } } diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Uint32Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Uint32Array.cs new file mode 100644 index 000000000..c04fbe6e5 --- /dev/null +++ b/src.csharp/AlphaTab/Core/EcmaScript/Uint32Array.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace AlphaTab.Core.EcmaScript +{ + public class Uint32Array : IEnumerable + { + private readonly uint[] _data; + + public double Length => _data.Length; + + public Uint32Array(double size) + { + _data = new uint[(int) size]; + } + + public double this[double index] + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _data[(int) index]; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set => _data[(int) index] = (uint) value; + } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)_data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs index 3571e4c3d..12db1bf56 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs @@ -1,11 +1,12 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; namespace AlphaTab.Core.EcmaScript { - public class Uint8Array + public class Uint8Array : IEnumerable, IEnumerable { private ArraySegment _data; @@ -58,5 +59,20 @@ public static implicit operator Uint8Array(byte[] v) { return new Uint8Array(v); } + + IEnumerator IEnumerable.GetEnumerator() + { + return _data.Select(d => (double) d).GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)_data).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } } diff --git a/src.csharp/AlphaTab/Model/JsonConverter.cs b/src.csharp/AlphaTab/Model/JsonConverter.cs new file mode 100644 index 000000000..6f6a72bd6 --- /dev/null +++ b/src.csharp/AlphaTab/Model/JsonConverter.cs @@ -0,0 +1,7 @@ +namespace AlphaTab.Model +{ + public class JsonConverter + { + + } +} diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 366211dfd..5baae1584 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -296,7 +296,7 @@ export class GpifWriter { } if (note.isTrill) { - noteNode.addElement('Trill').innerText = note.trillValue!.toString(); + noteNode.addElement('Trill').innerText = note.trillValue.toString(); } let accentFlags = 0; @@ -1308,7 +1308,7 @@ export class GpifWriter { instrumentSet.addElement('Type').innerText = GpifWriter.DrumKitProgramInfo.instrumentSetType; let currentElementType: string = ""; let currentElementName: string = ""; - let currentArticulations!: XmlNode; + let currentArticulations: XmlNode = null!; let counterPerType = new Map(); const elements = instrumentSet.addElement('Elements'); for (const articulation of track.percussionArticulations) { @@ -1444,7 +1444,7 @@ export class GpifWriter { const alternateEndings: number[] = []; let bit = 0; while (remainingBits > 0) { - if ((remainingBits >> bit) & 0x01) { + if (((remainingBits >> bit) & 0x01) == 0x01) { alternateEndings.push(bit + 1); // clear bit remainingBits &= ~(1 << bit); @@ -1510,7 +1510,7 @@ export class GpifWriter { const barNode = parent.addElement('Bar'); barNode.attributes.set('id', bar.id.toString()); - barNode.addElement('Voices').innerText = bar.voices.map(v => v.isEmpty ? '-1' : v.id).join(' '); + barNode.addElement('Voices').innerText = bar.voices.map(v => v.isEmpty ? '-1' : v.id.toString()).join(' '); barNode.addElement('Clef').innerText = Clef[bar.clef]; if (bar.clefOttava !== Ottavia.Regular) { barNode.addElement('Ottavia').innerText = Ottavia[bar.clefOttava].substr(1); diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 0a521faff..4e21a0f24 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -2244,9 +2244,9 @@ export class GpifParser { const bar = track.staves[0].bars[barNumber]; if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { const beat = bar.voices[0].beats[0]; - automations.forEach(a => { + for(const a of automations) { beat.automations.push(a); - }); + } } } }); diff --git a/src/io/IOHelper.ts b/src/io/IOHelper.ts index 6b4a74f9b..06833a434 100644 --- a/src/io/IOHelper.ts +++ b/src/io/IOHelper.ts @@ -184,7 +184,8 @@ export class IOHelper { const resArr = new Uint8Array(Len * 3); for (let point = 0, nextcode = 0, i = 0; i !== Len; ) { - (point = str.charCodeAt(i)), (i += 1); + point = str.charCodeAt(i); + i += 1; if (point >= 0xd800 && point <= 0xdbff) { if (i === Len) { resArr[(resPos += 1)] = 0xef /*0b11101111*/; diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index 38d323022..683977d9d 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -101,10 +101,10 @@ export class XmlNode { } - public set innerText(s: string) { + public set innerText(value: string) { const textNode = new XmlNode(); textNode.nodeType = XmlNodeType.Text; - textNode.value = s; + textNode.value = value; this.childNodes = [textNode]; } diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index c831c34fc..beccbc7e0 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -64,13 +64,13 @@ export class ZipWriter { private static buildCrc32Lookup(): Uint32Array { const poly = 0xedb88320; const lookup = new Uint32Array(256); - lookup.forEach((_, i, self) => { + for(let i = 0; i < lookup.length; i++) { let crc = i; for (let bit = 0; bit < 8; bit++) { - crc = crc & 1 ? (crc >>> 1) ^ poly : crc >>> 1; + crc = (crc & 1) === 1 ? (crc >>> 1) ^ poly : crc >>> 1; } - self[i] = crc; - }); + lookup[i] = crc; + } return lookup; } @@ -78,7 +78,7 @@ export class ZipWriter { // TypeScript definition, for reference. // export default function crc32( data: Buffer | Uint8Array | number[] ) { private static crc32(input: Uint8Array) { - return ~input.reduce((crc, byte) => ZipWriter.Crc32Lookup[(crc ^ byte) & 0xff] ^ (crc >>> 8), 0xffffffff); + return ~input.reduce((crc, b) => ZipWriter.Crc32Lookup[(crc ^ b) & 0xff] ^ (crc >>> 8), 0xffffffff); } public end() { diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 292a8e547..11295e4ba 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -13,7 +13,7 @@ describe('Gp7ExporterTest', () => { try { return ScoreLoader.loadScoreFromBytes(data); } - catch { + catch (e) { return null; } }; @@ -66,8 +66,8 @@ describe('Gp7ExporterTest', () => { } } else { - const expectedKeys = Object.keys(expected); - const actualKeys = Object.keys(actual); + const expectedKeys = expected.keys(); + const actualKeys = actual.keys(); expectedKeys.sort(); actualKeys.sort(); From fc226f3d010547b16ea70f285b74abf9607ae0ae Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 27 Dec 2020 20:10:01 +0100 Subject: [PATCH 19/31] Fixed tests --- .gitignore | 3 +- src/exporter/GpifWriter.ts | 85 ++++++++++++++--- .../model/InstrumentArticulationSerializer.ts | 4 + src/generated/model/VoiceSerializer.ts | 4 + src/model/Chord.ts | 3 + test/exporter/Gp7Exporter.test.ts | 83 +---------------- test/model/ComparisonHelpers.ts | 92 ++++++++++++++++++ test/model/JsonConverter.test.ts | 93 +------------------ 8 files changed, 180 insertions(+), 187 deletions(-) create mode 100644 test/model/ComparisonHelpers.ts diff --git a/.gitignore b/.gitignore index e56aa82bd..272047aef 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ bin/ .vs/ *.user *.tgz -test-results/ \ No newline at end of file +test-results/ +debug.log \ No newline at end of file diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 5baae1584..b344600d4 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1201,13 +1201,63 @@ export class GpifWriter { diagram.attributes.set('baseFret', (chord.firstFret - 1).toString()); diagram.attributes.set('barStates', chord.strings.map(_ => '1').join(' ')); + const frets: number[] = []; + const fretToStrings = new Map(); + for (let i = 0; i < chord.strings.length; i++) { - const fret = diagram.addElement('Fret'); - fret.attributes.set('string', (chord.strings.length - 1 - i).toString()); - fret.attributes.set('fret', chord.strings[i].toString()); + const fretNode = diagram.addElement('Fret'); + let chordFret = chord.strings[i]; + if (chordFret !== -1) { + const chordString = (chord.strings.length - 1 - i); + fretNode.attributes.set('string', chordString.toString()); + fretNode.attributes.set('fret', (chordFret - chord.firstFret + 1).toString()); + if (!fretToStrings.has(chordFret)) { + fretToStrings.set(chordFret, []); + frets.push(chordFret); + } + fretToStrings.get(chordFret)!.push(chordString); + } + } + + frets.sort(); + + // try to rebuild the barre frets + if (chord.barreFrets.length > 0) { + const fingers = [ + Fingers.LittleFinger, + Fingers.AnnularFinger, + Fingers.MiddleFinger, + Fingers.IndexFinger, + ]; + const fingering = diagram.addElement('Fingering'); + + for (const fret of frets) { + const fretStrings = fretToStrings.get(fret)!; + if (fretStrings.length > 1 && chord.barreFrets.indexOf(fret) >= 0) { + const finger = fingers.length > 0 ? fingers.pop() : Fingers.IndexFinger; + for (const fretString of fretStrings) { + const position = fingering.addElement('Position'); + switch (finger) { + case Fingers.LittleFinger: + position.attributes.set('finger', 'Pinky'); + break; + case Fingers.AnnularFinger: + position.attributes.set('finger', 'Ring'); + break; + case Fingers.MiddleFinger: + position.attributes.set('finger', 'Middle'); + break; + case Fingers.IndexFinger: + position.attributes.set('finger', 'Index'); + break; + } + position.attributes.set('fret', (fret - chord.firstFret + 1).toString()); + position.attributes.set('string', fretString.toString()); + } + } + } } - // TODO fingering const showName = diagram.addElement('Property'); showName.attributes.set('name', 'ShowName'); @@ -1477,24 +1527,29 @@ export class GpifWriter { } private writeFermata(parent: XmlNode, offset: number, fermata: Fermata) { - let numerator = 0; + let numerator = -1; let denominator = 1; - while (denominator < 10) { - // Offset = (numerator / denominator) * QuarterTime - // (Offset / QuarterTime) * denominator = numerator + if (offset > 0) { + while (denominator < 10) { + // Offset = (numerator / denominator) * QuarterTime + // (Offset / QuarterTime) * denominator = numerator - numerator = (offset / MidiUtils.QuarterTime) * denominator; + numerator = (offset / MidiUtils.QuarterTime) * denominator; - // found a full digit match - if (numerator === Math.floor(numerator)) { - break; - } + // found a full digit match + if (numerator === Math.floor(numerator)) { + break; + } + numerator = -1; + denominator++; + } + } else { numerator = 0; - denominator++; + denominator = 1; } - if (numerator === 0) { + if (numerator === -1) { // No split found return; } diff --git a/src/generated/model/InstrumentArticulationSerializer.ts b/src/generated/model/InstrumentArticulationSerializer.ts index 88ba1d01c..01c50ba6e 100644 --- a/src/generated/model/InstrumentArticulationSerializer.ts +++ b/src/generated/model/InstrumentArticulationSerializer.ts @@ -19,6 +19,7 @@ export class InstrumentArticulationSerializer { return null; } const o = new Map(); + o.set("elementType", obj.elementType); o.set("staffLine", obj.staffLine); o.set("noteHeadDefault", (obj.noteHeadDefault as number)); o.set("noteHeadHalf", (obj.noteHeadHalf as number)); @@ -30,6 +31,9 @@ export class InstrumentArticulationSerializer { } public static setProperty(obj: InstrumentArticulation, property: string, v: unknown): boolean { switch (property) { + case "elementtype": + obj.elementType = (v as string); + return true; case "staffline": obj.staffLine = (v as number); return true; diff --git a/src/generated/model/VoiceSerializer.ts b/src/generated/model/VoiceSerializer.ts index cb0eab375..56fb6c56b 100644 --- a/src/generated/model/VoiceSerializer.ts +++ b/src/generated/model/VoiceSerializer.ts @@ -19,12 +19,16 @@ export class VoiceSerializer { return null; } const o = new Map(); + o.set("id", obj.id); o.set("beats", obj.beats.map(i => BeatSerializer.toJson(i))); o.set("isEmpty", obj.isEmpty); return o; } public static setProperty(obj: Voice, property: string, v: unknown): boolean { switch (property) { + case "id": + obj.id = (v as number); + return true; case "beats": obj.beats = []; for (const o of (v as (Map | null)[])) { diff --git a/src/model/Chord.ts b/src/model/Chord.ts index b7b24e6ad..52edc3d3d 100644 --- a/src/model/Chord.ts +++ b/src/model/Chord.ts @@ -1,5 +1,8 @@ import { Staff } from '@src/model/Staff'; +// TODO: rework model to specify for each finger +// on which frets they are placed. + /** * A chord definition. * @json diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 11295e4ba..16556e649 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -6,6 +6,7 @@ import { TestPlatform } from '@test/TestPlatform'; import { Gp7Exporter } from '@src/exporter/Gp7Exporter'; import { JsonConverter } from '@src/model/JsonConverter'; import { ScoreLoader } from '@src/importer/ScoreLoader'; +import { ComparisonHelpers } from '@test/model/ComparisonHelpers'; describe('Gp7ExporterTest', () => { const loadScore: (name: string) => Promise = async (name: string): Promise => { @@ -28,86 +29,6 @@ describe('Gp7ExporterTest', () => { return new Gp7Exporter().export(score, null); }; - function expectJsonEqual(expected: any, actual: any, path: string) { - const expectedType = typeof expected; - const actualType = typeof actual; - - // NOTE: performance wise expect() seems quite expensive - // that's why we do a manual check for most asserts - - if (actualType != expectedType) { - fail(`Type Mismatch on hierarchy: ${path}, '${actualType}' != '${expectedType}'`); - } - - switch (actualType) { - case 'boolean': - if ((actual as boolean) != (expected as boolean)) { - fail(`Boolean mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'number': - if (Math.abs((actual as number) - (expected as number)) >= 0.000001) { - fail(`Number mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'object': - if ((actual === null) !== (expected === null)) { - fail(`Null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } else if (actual) { - if (Array.isArray(actual) !== Array.isArray(expected)) { - fail(`IsArray mismatch on hierarchy: ${path}`); - } else if (Array.isArray(actual) && Array.isArray(expected)) { - if (actual.length !== expected.length) { - fail(`Array Length mismatch on hierarchy: ${path}, ${actual.length} != ${expected.length}`); - } else { - for (let i = 0; i < actual.length; i++) { - expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); - } - } - } else { - - const expectedKeys = expected.keys(); - const actualKeys = actual.keys(); - expectedKeys.sort(); - actualKeys.sort(); - - const actualKeyList = actualKeys.join(','); - const expectedKeyList = expectedKeys.join(','); - if (actualKeyList !== expectedKeyList) { - fail(`Object Keys mismatch on hierarchy: ${path}, '${actualKeyList}' != '${expectedKeyList}'`); - } else { - for (const key of actualKeys) { - switch (key) { - // some ignored keys - case 'id': - case 'hammerPullOriginId': - case 'hammerPullDestinationId': - case 'tieOriginId': - case 'tieDestinationId': - break; - default: - expectJsonEqual(expected[key], actual[key], `${path}.${key}`); - break; - } - } - - } - } - } - break; - case 'string': - if ((actual as string) != (expected as string)) { - fail(`String mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'undefined': - if (actual !== expected) { - fail(`null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - } - } - const testRoundTripEqual: (name: string) => Promise = async (name: string): Promise => { try { const expected = await loadScore(name); @@ -121,7 +42,7 @@ describe('Gp7ExporterTest', () => { const expectedJson = JsonConverter.scoreToJsObject(expected); const actualJson = JsonConverter.scoreToJsObject(actual) - expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); } catch (e) { fail(e); } diff --git a/test/model/ComparisonHelpers.ts b/test/model/ComparisonHelpers.ts new file mode 100644 index 000000000..22287f19f --- /dev/null +++ b/test/model/ComparisonHelpers.ts @@ -0,0 +1,92 @@ + +export class ComparisonHelpers { + public static expectJsonEqual(expected: unknown, actual: unknown, path: string) { + const expectedType = typeof expected; + const actualType = typeof actual; + + // NOTE: performance wise expect() seems quite expensive + // that's why we do a manual check for most asserts + + if (actualType != expectedType) { + fail(`Type Mismatch on hierarchy: ${path}, '${actualType}' != '${expectedType}'`); + } + + switch (actualType) { + case 'boolean': + if ((actual as boolean) != (expected as boolean)) { + fail(`Boolean mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } + break; + case 'number': + if (Math.abs((actual as number) - (expected as number)) >= 0.000001) { + fail(`Number mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } + break; + case 'object': + if ((actual === null) !== (expected === null)) { + fail(`Null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } else if (actual) { + if (Array.isArray(actual) !== Array.isArray(expected)) { + fail(`IsArray mismatch on hierarchy: ${path}`); + } else if (Array.isArray(actual) && Array.isArray(expected)) { + if (actual.length !== expected.length) { + fail(`Array Length mismatch on hierarchy: ${path}, ${actual.length} != ${expected.length}`); + } else { + for (let i = 0; i < actual.length; i++) { + ComparisonHelpers.expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); + } + } + } else if (expected instanceof Map) { + if (!(actual instanceof Map)) { + fail(`Map mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } else { + const expectedMap = expected as Map; + const actualMap = actual as Map; + + const expectedKeys = Array.from(expectedMap.keys()); + const actualKeys = Array.from(actualMap.keys()); + expectedKeys.sort(); + actualKeys.sort(); + + const actualKeyList = actualKeys.join(','); + const expectedKeyList = expectedKeys.join(','); + if (actualKeyList !== expectedKeyList) { + fail(`Object Keys mismatch on hierarchy: ${path}, '${actualKeyList}' != '${expectedKeyList}'`); + } else { + for (const key of actualKeys) { + switch (key) { + // some ignored keys + case 'id': + case 'hammerPullOriginNoteId': + case 'hammerPullDestinationNoteId': + case 'tieOriginNoteId': + case 'tieDestinationNoteId': + break; + default: + ComparisonHelpers.expectJsonEqual(expectedMap.get(key), actualMap.get(key), `${path}.${key}`); + break; + } + } + + } + } + } else { + fail('Need Map serialization for comparing json objects'); + } + } + break; + case 'string': + if ((actual as string) != (expected as string)) { + fail(`String mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } + break; + case 'undefined': + if (actual !== expected) { + fail(`null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); + } + break; + } + } + + +} \ No newline at end of file diff --git a/test/model/JsonConverter.test.ts b/test/model/JsonConverter.test.ts index 1a466bc44..9d7bbcab3 100644 --- a/test/model/JsonConverter.test.ts +++ b/test/model/JsonConverter.test.ts @@ -7,6 +7,7 @@ import { JsonConverter } from "@src/model/JsonConverter"; import { Score } from "@src/model/Score"; import { NotationElement, TabRhythmMode } from "@src/NotationSettings"; import { TestPlatform } from "@test/TestPlatform"; +import { ComparisonHelpers } from "./ComparisonHelpers"; describe('JsonConverterTest', () => { const loadScore: (name: string) => Promise = async (name: string): Promise => { @@ -19,94 +20,6 @@ describe('JsonConverterTest', () => { } }; - function expectJsonEqual(expected: unknown, actual: unknown, path: string) { - const expectedType = typeof expected; - const actualType = typeof actual; - - // NOTE: performance wise expect() seems quite expensive - // that's why we do a manual check for most asserts - - if (actualType != expectedType) { - fail(`Type Mismatch on hierarchy: ${path}, '${actualType}' != '${expectedType}'`); - } - - switch (actualType) { - case 'boolean': - if ((actual as boolean) != (expected as boolean)) { - fail(`Boolean mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'number': - if (Math.abs((actual as number) - (expected as number)) >= 0.000001) { - fail(`Number mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'object': - if ((actual === null) !== (expected === null)) { - fail(`Null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } else if (actual) { - if (Array.isArray(actual) !== Array.isArray(expected)) { - fail(`IsArray mismatch on hierarchy: ${path}`); - } else if (Array.isArray(actual) && Array.isArray(expected)) { - if (actual.length !== expected.length) { - fail(`Array Length mismatch on hierarchy: ${path}, ${actual.length} != ${expected.length}`); - } else { - for (let i = 0; i < actual.length; i++) { - expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); - } - } - } else if (expected instanceof Map) { - if (!(actual instanceof Map)) { - fail(`Map mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } else { - const expectedMap = expected as Map; - const actualMap = actual as Map; - - const expectedKeys = Array.from(expectedMap.keys()); - const actualKeys = Array.from(actualMap.keys()); - expectedKeys.sort(); - actualKeys.sort(); - - const actualKeyList = actualKeys.join(','); - const expectedKeyList = expectedKeys.join(','); - if (actualKeyList !== expectedKeyList) { - fail(`Object Keys mismatch on hierarchy: ${path}, '${actualKeyList}' != '${expectedKeyList}'`); - } else { - for (const key of actualKeys) { - switch (key) { - // some ignored keys - case 'id': - case 'hammerPullOriginId': - case 'hammerPullDestinationId': - case 'tieOriginId': - case 'tieDestinationId': - break; - default: - expectJsonEqual(expectedMap.get(key), actualMap.get(key), `${path}.${key}`); - break; - } - } - - } - } - } else { - fail('Need Map serialization for comparing json objects'); - } - } - break; - case 'string': - if ((actual as string) != (expected as string)) { - fail(`String mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - case 'undefined': - if (actual !== expected) { - fail(`null mismatch on hierarchy: ${path}, '${actual}' != '${expected}'`); - } - break; - } - } - const testRoundTripEqual: (name: string) => Promise = async (name: string): Promise => { try { const expected = await loadScore(name); @@ -118,7 +31,7 @@ describe('JsonConverterTest', () => { const actual = JsonConverter.jsObjectToScore(expectedJson); const actualJson = JsonConverter.scoreToJsObject(actual); - expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); } catch (e) { fail(e); } @@ -222,7 +135,7 @@ describe('JsonConverterTest', () => { const actual = JsonConverter.jsObjectToSettings(expectedJson); const actualJson = JsonConverter.settingsToJsObject(actual); - expectJsonEqual(expectedJson, actualJson, ''); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, ''); }); it('settings-from-map', () => { From 0cddcc811fdc6ab30c58cd86f457a4546f4dc8d3 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 27 Dec 2020 20:56:49 +0100 Subject: [PATCH 20/31] Fixed C# version --- src.compiler/csharp/CSharpAstPrinter.ts | 21 ++++++---- src.compiler/csharp/CSharpAstTransformer.ts | 45 +++++++++++++++++++-- src.csharp/AlphaTab.Test/Test/Globals.cs | 12 ++++++ src.csharp/AlphaTab/Model/JsonConverter.cs | 7 ---- src/exporter/GpifWriter.ts | 2 +- test/xml/XmllWrite.test.ts | 9 ++++- 6 files changed, 76 insertions(+), 20 deletions(-) delete mode 100644 src.csharp/AlphaTab/Model/JsonConverter.cs diff --git a/src.compiler/csharp/CSharpAstPrinter.ts b/src.compiler/csharp/CSharpAstPrinter.ts index bee2fed26..a81f47182 100644 --- a/src.compiler/csharp/CSharpAstPrinter.ts +++ b/src.compiler/csharp/CSharpAstPrinter.ts @@ -857,24 +857,29 @@ export default class CSharpAstPrinter { } private writeStringTemplateExpression(expr: cs.StringTemplateExpression) { - this.write('$@"'); + this.write('string.Format(System.Globalization.CultureInfo.InvariantCulture, @"'); + let exprs: cs.Expression[] = []; expr.chunks.forEach(c => { if (c.nodeType === cs.SyntaxKind.StringLiteral) { const escapedText = (c as cs.StringLiteral).text .split('"') .join('""') - .split('{') - .join('{{') - .split('}') - .join('}}'); + .split('\n') + .join('\\n') + .split('\r') + .join('\\r'); this.write(escapedText); } else { - this.write('{'); - this.writeExpression(c as cs.Expression); - this.write('}'); + this.write(`{${exprs.length}}`); + exprs.push(c as cs.Expression); } }); this.write('"'); + exprs.forEach(expr => { + this.write(', '); + this.writeExpression(expr); + }) + this.write(')'); } private writeIsExpression(expr: cs.IsExpression) { diff --git a/src.compiler/csharp/CSharpAstTransformer.ts b/src.compiler/csharp/CSharpAstTransformer.ts index 62410f884..2ab340167 100644 --- a/src.compiler/csharp/CSharpAstTransformer.ts +++ b/src.compiler/csharp/CSharpAstTransformer.ts @@ -309,7 +309,7 @@ export default class CSharpAstTransformer { const text = node.getSourceFile().text; // check for /*@target web*/ marker const commentText = text.substr(node.getStart() - node.getLeadingTriviaWidth(), node.getLeadingTriviaWidth()); - if(commentText.indexOf('/*@target web*/') >= 0) { + if (commentText.indexOf('/*@target web*/') >= 0) { return true; } } @@ -1228,6 +1228,15 @@ export default class CSharpAstTransformer { csMethod.body = this.visitBlock(csMethod, classElement.body); } + switch (csMethod.name) { + case 'ToString': + if(csMethod.parameters.length === 0) { + csMethod.isVirtual = false; + csMethod.isOverride = true; + } + break; + } + parent.members.push(csMethod); this._context.registerSymbol(csMethod); @@ -1982,6 +1991,10 @@ export default class CSharpAstTransformer { return null; } + if (csExpr.operator === "~") { + csExpr.operand = this.makeInt(csExpr.operand); + } + return csExpr; } @@ -2809,8 +2822,8 @@ export default class CSharpAstTransformer { private visitElementAccessExpression(parent: cs.Node, expression: ts.ElementAccessExpression) { // Enum[value] => value.ToString() - const symbol = this._context.typeChecker.getSymbolAtLocation(expression.expression); - if (symbol && symbol.flags & ts.SymbolFlags.Enum) { + const enumType = this._context.typeChecker.getTypeAtLocation(expression.expression); + if (enumType?.symbol && enumType.symbol.flags & ts.SymbolFlags.RegularEnum) { const callExpr = { parent: parent, arguments: [], @@ -2853,6 +2866,7 @@ export default class CSharpAstTransformer { return null; } + const symbol = this._context.typeChecker.getSymbolAtLocation(expression.expression); let type = symbol ? this._context.typeChecker.getTypeOfSymbolAtLocation(symbol!, expression.expression) : null; if (type) { type = this._context.typeChecker.getNonNullableType(type); @@ -2915,6 +2929,31 @@ export default class CSharpAstTransformer { } }); + // number.ToString + const isNumberToString = ts.isPropertyAccessExpression(expression.expression) + && this._context.typeChecker.getTypeAtLocation(expression.expression.expression).flags & ts.TypeFlags.Number + && (expression.expression.name as ts.Identifier).text === 'toString' + && expression.arguments.length === 0; + + if(isNumberToString) { + const invariantCultureInfo = { + parent: parent, + nodeType: cs.SyntaxKind.MemberAccessExpression, + tsNode: expression, + expression: null!, + member: 'InvariantCulture' + } as cs.MemberAccessExpression; + + invariantCultureInfo.expression = { + parent: invariantCultureInfo, + tsNode: expression.expression, + nodeType: cs.SyntaxKind.Identifier, + text: 'System.Globalization.CultureInfo' + } as cs.Identifier; + + callExpression.arguments.push(invariantCultureInfo); + } + if (expression.typeArguments) { callExpression.typeArguments = []; expression.typeArguments.forEach(a => diff --git a/src.csharp/AlphaTab.Test/Test/Globals.cs b/src.csharp/AlphaTab.Test/Test/Globals.cs index 788dc47dc..8f0218c32 100644 --- a/src.csharp/AlphaTab.Test/Test/Globals.cs +++ b/src.csharp/AlphaTab.Test/Test/Globals.cs @@ -42,6 +42,18 @@ public void ToEqual(object expected, string message = null) Assert.AreEqual(expected, _actual, _message + message); } + public void ToBeCloseTo(double expected, string message = null) + { + if (_actual is IConvertible c) + { + Assert.AreEqual(expected, c.ToDouble(CultureInfo.InvariantCulture), 0.001, _message + message); + } + else + { + Assert.Fail("ToBeCloseTo can only be used with numeric operands"); + } + } + public void ToBe(object expected) { if (expected is int i && _actual is double) diff --git a/src.csharp/AlphaTab/Model/JsonConverter.cs b/src.csharp/AlphaTab/Model/JsonConverter.cs deleted file mode 100644 index 6f6a72bd6..000000000 --- a/src.csharp/AlphaTab/Model/JsonConverter.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace AlphaTab.Model -{ - public class JsonConverter - { - - } -} diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index b344600d4..e50e9547b 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -1205,9 +1205,9 @@ export class GpifWriter { const fretToStrings = new Map(); for (let i = 0; i < chord.strings.length; i++) { - const fretNode = diagram.addElement('Fret'); let chordFret = chord.strings[i]; if (chordFret !== -1) { + const fretNode = diagram.addElement('Fret'); const chordString = (chord.strings.length - 1 - i); fretNode.attributes.set('string', chordString.toString()); fretNode.attributes.set('fret', (chordFret - chord.firstFret + 1).toString()); diff --git a/test/xml/XmllWrite.test.ts b/test/xml/XmllWrite.test.ts index 896f61ea0..5d640d2de 100644 --- a/test/xml/XmllWrite.test.ts +++ b/test/xml/XmllWrite.test.ts @@ -45,6 +45,13 @@ describe('XmlWriteTest', () => { expect(xml.toString(" ")).toEqual('\n \n'); }); + it('writeNumber', () => { + let s: string = '0.5'; + let xml: XmlDocument = new XmlDocument(); + xml.parse(s); + expect(xml.toString()).toEqual('0.5'); + }); + it('writeMultiChild', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); @@ -58,7 +65,7 @@ describe('XmlWriteTest', () => { let s: string = ''; let xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toString(undefined, true)).toEqual(''); + expect(xml.toString('', true)).toEqual(''); expect(xml.toString(" ", true)).toEqual('\n'); }); From 60405d44b33eebe6a01ee57e7ea4a8ac27ef181c Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 27 Dec 2020 23:04:59 +0100 Subject: [PATCH 21/31] Fix detected GP issues --- karma.conf.js | 13 +++ playground-template/control.js | 2 +- src/exporter/GpifWriter.ts | 159 +++++++++++++++++------------- src/model/Note.ts | 17 +++- test/TestPlatform.ts | 19 ++++ test/exporter/Gp7Exporter.test.ts | 6 +- 6 files changed, 140 insertions(+), 76 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 566253fca..dc0cd27c7 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -74,6 +74,19 @@ module.exports = function (config) { }); } ); + app.post( + '/save-file', + upload.fields([ + { + name: 'file', + maxCount: 1 + } + ]), + function (req, res) { + log.info(`save file ${req.file}`); + res.send(JSON.stringify('OK')); + } + ); app.post( '/save-visual-error', upload.fields([ diff --git a/playground-template/control.js b/playground-template/control.js index 73253bea0..5b9f8c248 100644 --- a/playground-template/control.js +++ b/playground-template/control.js @@ -239,7 +239,7 @@ function setupControl(selector) { const exporter = new alphaTab.exporter.Gp7Exporter(); const data = exporter.export(at.score, at.settings); const a = document.createElement('a'); - a.download = at.score.title + '.gp'; + a.download = at.score.title.length > 0 ? at.score.title + '.gp' : 'song.gp'; a.href = URL.createObjectURL(new Blob([data])); document.body.appendChild(a); a.click(); diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index e50e9547b..88971498c 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -386,13 +386,16 @@ export class GpifWriter { if (note.isStringed) { this.writeSimplePropertyNode(properties, 'String', 'String', (note.string - 1).toString()); this.writeSimplePropertyNode(properties, 'Fret', 'Fret', note.fret.toString()); + this.writeSimplePropertyNode(properties, 'Midi', 'Number', note.realValue.toString()); } if (note.isPiano) { this.writeSimplePropertyNode(properties, 'Octave', 'Number', note.octave.toString()); this.writeSimplePropertyNode(properties, 'Tone', 'Step', note.tone.toString()); + this.writeSimplePropertyNode(properties, 'Midi', 'Number', note.realValue.toString()); } + if (note.beat.tap) { this.writeSimplePropertyNode(properties, 'Tapped', 'Enable', null); } @@ -487,95 +490,92 @@ export class GpifWriter { private writeTransposedPitch(properties: XmlNode, note: Note) { if (note.isPercussion) { - this.writePitch(properties, "ConcertPitch", "C", "-1", NoteAccidentalMode.Default); + this.writePitch(properties, "ConcertPitch", "C", "-1", ''); } else { - let parts = Tuning.getTextPartsForTuning(note.displayValueWithoutBend, 0); - this.writePitch(properties, "TransposedPitch", parts[0], parts[1], note.accidentalMode) + this.writePitchForValue(properties, "TransposedPitch", note.displayValueWithoutBend, note.accidentalMode) } } private writeConcertPitch(properties: XmlNode, note: Note) { if (note.isPercussion) { - this.writePitch(properties, "ConcertPitch", "C", "-1", NoteAccidentalMode.Default); + this.writePitch(properties, "ConcertPitch", "C", "-1", ''); } else { - let parts = Tuning.getTextPartsForTuning(note.realValue, 0); - this.writePitch(properties, "ConcertPitch", parts[0], parts[1], note.accidentalMode) + this.writePitchForValue(properties, "ConcertPitch", note.realValueWithoutHarmonic, note.accidentalMode) } } - private writePitch(properties: XmlNode, propertyName: string, step: string, octave: string, accidental: NoteAccidentalMode) { - const property = properties.addElement('Property'); - property.attributes.set('name', propertyName); + private static readonly defaultAccidentals: string[] = ['', '#', '', '#', '', '', '#', '', '#', '', '#', '']; + private static readonly defaultSteps: string[] = ['C', 'C', 'D', 'D', 'E', 'F', 'F', 'G', 'G', 'A', 'A', 'B']; - const pitch = property.addElement('Pitch'); - const stepElement = pitch.addElement('Step'); - const accidentalElement = pitch.addElement('Accidental'); - switch (step) { - case 'C': - stepElement.innerText = 'C'; - accidentalElement.innerText = ''; - break; - case 'Db': - stepElement.innerText = 'C'; - accidentalElement.innerText = '#'; - break; - case 'D': - stepElement.innerText = 'D'; - accidentalElement.innerText = ''; - break; - case 'Eb': - stepElement.innerText = 'D'; - accidentalElement.innerText = '#'; - break; - case 'E': - stepElement.innerText = 'E'; - accidentalElement.innerText = ''; - break; - case 'F': - stepElement.innerText = 'F'; - accidentalElement.innerText = ''; - break; - case 'Gb': - stepElement.innerText = 'F'; - accidentalElement.innerText = '#'; - break; - case 'G': - stepElement.innerText = 'G'; - accidentalElement.innerText = ''; + private writePitchForValue(properties: XmlNode, propertyName: string, value: number, accidentalMode: NoteAccidentalMode) { + let index = 0; + let octave: number = 0; + + let step = ''; + let accidental = ''; + + function updateParts() { + index = value % 12; + octave = (value / 12) | 0; + + step = GpifWriter.defaultSteps[index]; + accidental = GpifWriter.defaultAccidentals[index]; + } + updateParts(); + + switch (accidentalMode) { + case NoteAccidentalMode.Default: break; - case 'Ab': - stepElement.innerText = 'G'; - accidentalElement.innerText = '#'; + case NoteAccidentalMode.SwapAccidentals: + if(accidental === '#') { + value += 1; + updateParts(); + accidental = 'b'; + } break; - case 'A': - stepElement.innerText = 'A'; - accidentalElement.innerText = ''; + case NoteAccidentalMode.ForceNone: + accidental = ''; break; - case 'Bb': - stepElement.innerText = 'A'; - accidentalElement.innerText = '#'; + case NoteAccidentalMode.ForceNatural: + accidental = '' break; - case 'B': - stepElement.innerText = 'B'; - accidentalElement.innerText = ''; + case NoteAccidentalMode.ForceSharp: + accidental = '#'; break; - } - - switch (accidental) { case NoteAccidentalMode.ForceDoubleSharp: - accidentalElement.innerText = 'x'; - break; - case NoteAccidentalMode.ForceSharp: - accidentalElement.innerText = '#'; + if(accidental === '#') { + value -= 2; + updateParts(); + } + accidental = 'x'; break; case NoteAccidentalMode.ForceFlat: - accidentalElement.innerText = 'b'; + if(accidental === '#') { + value += 1; + updateParts(); + } + accidental = 'b'; break; case NoteAccidentalMode.ForceDoubleFlat: - accidentalElement.innerText = 'bb'; + if(accidental === '#') { + value += 2; + updateParts(); + } + accidental = 'bb'; break; } + this.writePitch(properties, propertyName, step, octave.toString(), accidental); + } + + private writePitch(properties: XmlNode, propertyName: string, step: string, octave: string, accidental: string) { + const property = properties.addElement('Property'); + property.attributes.set('name', propertyName); + + const pitch = property.addElement('Pitch'); + + pitch.addElement('Step').innerText = step; + pitch.addElement('Accidental').innerText = accidental; pitch.addElement('Octave').innerText = octave; } @@ -656,7 +656,7 @@ export class GpifWriter { } } if (beat.hasChord) { - beatNode.addElement('Chord').innerText = beat.chordId!; + beatNode.addElement('Chord').setCData(beat.chordId!); } if (beat.crescendo !== CrescendoType.None) { beatNode.addElement('Hairpin').innerText = CrescendoType[beat.crescendo]; @@ -1181,12 +1181,13 @@ export class GpifWriter { this.writeSimplePropertyNode(properties, 'TuningFlat', 'Enable', null); - this.writeDiagramCollection(properties, staff); + this.writeDiagramCollection(properties, staff, 'DiagramCollection'); + this.writeDiagramCollection(properties, staff, 'DiagramWorkingSet'); } - private writeDiagramCollection(properties: XmlNode, staff: Staff) { + private writeDiagramCollection(properties: XmlNode, staff: Staff, name: string) { const diagramCollectionProperty = properties.addElement('Property'); - diagramCollectionProperty.attributes.set('name', 'DiagramCollection'); + diagramCollectionProperty.attributes.set('name', name); const diagramCollectionItems = diagramCollectionProperty.addElement('Items'); staff.chords.forEach((chord, id) => { @@ -1222,6 +1223,7 @@ export class GpifWriter { frets.sort(); // try to rebuild the barre frets + const fingering = diagram.addElement('Fingering'); if (chord.barreFrets.length > 0) { const fingers = [ Fingers.LittleFinger, @@ -1229,7 +1231,6 @@ export class GpifWriter { Fingers.MiddleFinger, Fingers.IndexFinger, ]; - const fingering = diagram.addElement('Fingering'); for (const fret of frets) { const fretStrings = fretToStrings.get(fret)!; @@ -1276,6 +1277,24 @@ export class GpifWriter { // TODO Chord details + const chordNode = diagram.addElement('Chord'); + const keyNoteNode = chordNode.addElement('KeyNote'); + keyNoteNode.attributes.set('step', 'C'); + keyNoteNode.attributes.set('accidental', 'Natural'); + + const bassNoteNode = chordNode.addElement('BassNote'); + bassNoteNode.attributes.set('step', 'C'); + bassNoteNode.attributes.set('accidental', 'Natural'); + + const degree1Node = chordNode.addElement('Degree'); + degree1Node.attributes.set('interval', 'Third'); + degree1Node.attributes.set('alteration', 'Major'); + degree1Node.attributes.set('omitted', 'false'); + + const degree2Node = chordNode.addElement('Degree'); + degree2Node.attributes.set('interval', 'Fifth'); + degree2Node.attributes.set('alteration', 'Perfect'); + degree2Node.attributes.set('omitted', 'false'); }); } diff --git a/src/model/Note.ts b/src/model/Note.ts index 78f900f98..810cf9006 100644 --- a/src/model/Note.ts +++ b/src/model/Note.ts @@ -526,14 +526,23 @@ export class Note { } public get realValue(): number { + let realValue = this.realValueWithoutHarmonic; + if (this.isStringed) { + if (this.harmonicType === HarmonicType.Natural) { + realValue = this.harmonicPitch + this.stringTuning - this.beat.voice.bar.staff.transpositionPitch; + } else { + realValue += this.harmonicPitch; + } + } + return realValue; + } + + public get realValueWithoutHarmonic(): number { if (this.isPercussion) { return this.percussionArticulation; } if (this.isStringed) { - if (this.harmonicType === HarmonicType.Natural) { - return this.harmonicPitch + this.stringTuning - this.beat.voice.bar.staff.transpositionPitch; - } - return this.fret + this.stringTuning - this.beat.voice.bar.staff.transpositionPitch + this.harmonicPitch; + return this.fret + this.stringTuning - this.beat.voice.bar.staff.transpositionPitch; } if (this.isPiano) { return this.octave * 12 + this.tone - this.beat.voice.bar.staff.transpositionPitch; diff --git a/test/TestPlatform.ts b/test/TestPlatform.ts index 92de3964f..dabfbef10 100644 --- a/test/TestPlatform.ts +++ b/test/TestPlatform.ts @@ -10,6 +10,25 @@ export class TestPlatform { return ByteBuffer.fromString(tex); } + /** + * @target web + */ + public static saveFile(name: string, data: Uint8Array): Promise { + return new Promise((resolve, reject) => { + let x: XMLHttpRequest = new XMLHttpRequest(); + x.open('POST', 'http://localhost:8090/save-file/', true); + x.onload = () => { + resolve(); + }; + x.onerror = () => { + reject(); + }; + const form = new FormData(); + form.append('file', new Blob([data]), name); + x.send(form); + }); + } + /** * @target web */ diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 16556e649..8c515c58a 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -36,13 +36,17 @@ describe('Gp7ExporterTest', () => { return; } + const fileName = name.substr(name.lastIndexOf('/') + 1); const exported = exportGp7(expected); + + await TestPlatform.saveFile(fileName, exported); + const actual = prepareGp7ImporterWithBytes(exported).readScore(); const expectedJson = JsonConverter.scoreToJsObject(expected); const actualJson = JsonConverter.scoreToJsObject(actual) - ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + fileName + '>'); } catch (e) { fail(e); } From 40e559a64871dd6f7b6b7302f3b8b0075bd5f838 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 27 Dec 2020 23:30:49 +0100 Subject: [PATCH 22/31] Restore changes after rebase --- src.compiler/csharp/CSharpAstTransformer.ts | 8 +++++-- src.compiler/csharp/CSharpEmitterContext.ts | 8 ++++++- src.csharp/AlphaTab.Test/Test/Globals.cs | 2 +- src.csharp/AlphaTab.Test/TestPlatform.cs | 10 +++++++- .../AlphaTab/Core/EcmaScript/Uint8Array.cs | 2 ++ src.csharp/AlphaTab/Core/TypeHelper.cs | 23 +++++++++++++++++++ src/exporter/GpifWriter.ts | 5 ++-- test/TestPlatform.ts | 2 +- 8 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src.compiler/csharp/CSharpAstTransformer.ts b/src.compiler/csharp/CSharpAstTransformer.ts index 2ab340167..c9c35ecd8 100644 --- a/src.compiler/csharp/CSharpAstTransformer.ts +++ b/src.compiler/csharp/CSharpAstTransformer.ts @@ -2298,8 +2298,10 @@ export default class CSharpAstTransformer { switch (expression.operatorToken.kind) { case ts.SyntaxKind.AmpersandToken: case ts.SyntaxKind.GreaterThanGreaterThanToken: + case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: case ts.SyntaxKind.LessThanLessThanToken: case ts.SyntaxKind.BarToken: + case ts.SyntaxKind.CaretToken: binaryExpression.left = this.makeInt(binaryExpression.left); binaryExpression.right = this.makeInt(binaryExpression.right); break; @@ -2712,6 +2714,9 @@ export default class CSharpAstTransformer { case 'length': memberAccess.member = 'Count'; break; + case 'reverse': + memberAccess.member = 'Reversed'; + break; case 'push': memberAccess.member = 'Add'; break; @@ -3265,9 +3270,8 @@ export default class CSharpAstTransformer { case ts.SyntaxKind.LessThanLessThanToken: return '<<'; case ts.SyntaxKind.GreaterThanGreaterThanToken: - return '>>'; case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken: - return '>>>'; + return '>>'; case ts.SyntaxKind.LessThanToken: return '<'; diff --git a/src.compiler/csharp/CSharpEmitterContext.ts b/src.compiler/csharp/CSharpEmitterContext.ts index 7663d3e72..6d394c78f 100644 --- a/src.compiler/csharp/CSharpEmitterContext.ts +++ b/src.compiler/csharp/CSharpEmitterContext.ts @@ -613,7 +613,7 @@ export default class CSharpEmitterContext { } // object -> object - if(tsType.flags === ts.TypeFlags.NonPrimitive && 'objectFlags' in tsType && 'intrinsicName' in tsType) { + if (tsType.flags === ts.TypeFlags.NonPrimitive && 'objectFlags' in tsType && 'intrinsicName' in tsType) { const unknown = handleNullablePrimitive(cs.PrimitiveType.Object); unknown.isNullable = true; return unknown; @@ -933,6 +933,12 @@ export default class CSharpEmitterContext { return null; } + // For Enum[value] we do not smart cast value to a number + if (ts.isElementAccessExpression(expression.parent) && + expression.parent.argumentExpression === expression) { + return null; + } + // we consider the expression as smart casted if the declared symbol has a different // contextual type than the declared type. let symbol = this.typeChecker.getSymbolAtLocation(expression); diff --git a/src.csharp/AlphaTab.Test/Test/Globals.cs b/src.csharp/AlphaTab.Test/Test/Globals.cs index 8f0218c32..d24a13ffa 100644 --- a/src.csharp/AlphaTab.Test/Test/Globals.cs +++ b/src.csharp/AlphaTab.Test/Test/Globals.cs @@ -46,7 +46,7 @@ public void ToBeCloseTo(double expected, string message = null) { if (_actual is IConvertible c) { - Assert.AreEqual(expected, c.ToDouble(CultureInfo.InvariantCulture), 0.001, _message + message); + Assert.AreEqual(expected, c.ToDouble(System.Globalization.CultureInfo.InvariantCulture), 0.001, _message + message); } else { diff --git a/src.csharp/AlphaTab.Test/TestPlatform.cs b/src.csharp/AlphaTab.Test/TestPlatform.cs index 06280e1a4..6582ca651 100644 --- a/src.csharp/AlphaTab.Test/TestPlatform.cs +++ b/src.csharp/AlphaTab.Test/TestPlatform.cs @@ -16,9 +16,17 @@ public static async Task LoadFile(string path) return new Uint8Array(ms.ToArray()); } + public static async Task SaveFile(string name, Uint8Array data) + { + var path = Path.Combine("test-results", name); + Directory.CreateDirectory(Path.GetDirectoryName(path)); + await using var fs = new FileStream(Path.Combine("test-results", name), FileMode.Create); + await fs.WriteAsync(data.Data.Array!, data.Data.Offset, data.Data.Count); + } + public static Task> ListDirectory(string path) { - return Task.FromResult((IList)Directory.EnumerateFiles(path) + return Task.FromResult((IList) Directory.EnumerateFiles(path) .Select(Path.GetFileName) .ToList()); } diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs index 12db1bf56..8124b0b51 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Uint8Array.cs @@ -14,6 +14,8 @@ public class Uint8Array : IEnumerable, IEnumerable public ArrayBuffer Buffer => new ArrayBuffer(_data); + public ArraySegment Data => _data; + public Uint8Array(byte[] data) { _data = new ArraySegment(data); diff --git a/src.csharp/AlphaTab/Core/TypeHelper.cs b/src.csharp/AlphaTab/Core/TypeHelper.cs index d18083523..cc77bc7b2 100644 --- a/src.csharp/AlphaTab/Core/TypeHelper.cs +++ b/src.csharp/AlphaTab/Core/TypeHelper.cs @@ -183,6 +183,29 @@ public static void Sort(this IList data) } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TResult Reduce(this IEnumerable source, Func func, TResult seed) + { + return source.Aggregate(seed, func); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static IList Map(this IEnumerable source, Func func) + { + return source.Select(func).ToList(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static IEnumerable Reversed(this IEnumerable source) + { + return source.Reverse(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static string Join(this IEnumerable source, string separator) + { + return string.Join(separator, source); + } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string Substr(this string s, double start, double length) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 88971498c..61ab6d1f0 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -30,7 +30,6 @@ import { SlideOutType } from '@src/model/SlideOutType'; import { Staff } from '@src/model/Staff'; import { Track } from '@src/model/Track'; import { TripletFeel } from '@src/model/TripletFeel'; -import { Tuning } from '@src/model/Tuning'; import { VibratoType } from '@src/model/VibratoType'; import { Voice } from '@src/model/Voice'; import { TextBaseline } from '@src/platform/ICanvas'; @@ -514,13 +513,13 @@ export class GpifWriter { let step = ''; let accidental = ''; - function updateParts() { + const updateParts: () => void = () => { index = value % 12; octave = (value / 12) | 0; step = GpifWriter.defaultSteps[index]; accidental = GpifWriter.defaultAccidentals[index]; - } + }; updateParts(); switch (accidentalMode) { diff --git a/test/TestPlatform.ts b/test/TestPlatform.ts index dabfbef10..7879e48d0 100644 --- a/test/TestPlatform.ts +++ b/test/TestPlatform.ts @@ -14,7 +14,7 @@ export class TestPlatform { * @target web */ public static saveFile(name: string, data: Uint8Array): Promise { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { let x: XMLHttpRequest = new XMLHttpRequest(); x.open('POST', 'http://localhost:8090/save-file/', true); x.onload = () => { From c7f5efed7a1fed6ec941f537326433928e6ef112 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Mon, 28 Dec 2020 02:14:28 +0100 Subject: [PATCH 23/31] Fixed C# version --- src.compiler/csharp/CSharpAstTransformer.ts | 36 ++++- src.csharp/AlphaTab/Core/Dom/TextEncoder.cs | 2 +- src.csharp/AlphaTab/Core/EcmaScript/Map.cs | 5 + src.csharp/AlphaTab/Core/TypeHelper.cs | 5 + src/exporter/GpifWriter.ts | 145 ++++++++++---------- src/importer/AlphaTexImporter.ts | 13 +- src/importer/Gp3To5Importer.ts | 14 +- src/importer/GpifParser.ts | 61 ++++---- src/model/Beat.ts | 21 ++- src/model/NoteAccidentalMode.ts | 4 - src/model/PercussionMapper.ts | 2 +- src/model/Tuning.ts | 3 + src/xml/XmlNode.ts | 3 + test-data/conversion/full-song.gp5 | Bin 0 -> 62391 bytes test-data/conversion/full-song.gpx | Bin 0 -> 218810 bytes test/audio/MidiFileGenerator.test.ts | 14 +- test/exporter/Gp7Exporter.test.ts | 51 ++++++- test/model/ComparisonHelpers.ts | 8 +- test/model/JsonConverter.test.ts | 4 +- 19 files changed, 254 insertions(+), 137 deletions(-) create mode 100644 test-data/conversion/full-song.gp5 create mode 100644 test-data/conversion/full-song.gpx diff --git a/src.compiler/csharp/CSharpAstTransformer.ts b/src.compiler/csharp/CSharpAstTransformer.ts index c9c35ecd8..275b68c26 100644 --- a/src.compiler/csharp/CSharpAstTransformer.ts +++ b/src.compiler/csharp/CSharpAstTransformer.ts @@ -1230,7 +1230,7 @@ export default class CSharpAstTransformer { switch (csMethod.name) { case 'ToString': - if(csMethod.parameters.length === 0) { + if (csMethod.parameters.length === 0) { csMethod.isVirtual = false; csMethod.isOverride = true; } @@ -2646,6 +2646,25 @@ export default class CSharpAstTransformer { } }); + return csExpr; + } else if (this.isSetInitializer(expression)) { + const csExpr = { + parent: parent, + tsNode: expression, + nodeType: cs.SyntaxKind.InvocationExpression, + arguments: [], + expression: {} as cs.Expression + } as cs.InvocationExpression; + + csExpr.expression = this.makeMemberAccess(csExpr, 'AlphaTab.Core.TypeHelper', 'SetInitializer'); + + expression.elements.forEach(e => { + const ex = this.visitExpression(csExpr, e); + if (ex) { + csExpr.arguments.push(ex); + } + }); + return csExpr; } else { const csExpr = { @@ -2687,6 +2706,15 @@ export default class CSharpAstTransformer { return false; } + private isSetInitializer(expression: ts.ArrayLiteralExpression) { + const isCandidate = expression.parent.kind === ts.SyntaxKind.NewExpression; + if (!isCandidate) { + return false; + } + + return this._context.typeChecker.getTypeAtLocation(expression.parent).symbol.name === 'Set'; + } + private visitPropertyAccessExpression(parent: cs.Node, expression: ts.PropertyAccessExpression) { const memberAccess = { expression: {} as cs.Expression, @@ -2716,7 +2744,7 @@ export default class CSharpAstTransformer { break; case 'reverse': memberAccess.member = 'Reversed'; - break; + break; case 'push': memberAccess.member = 'Add'; break; @@ -2935,12 +2963,12 @@ export default class CSharpAstTransformer { }); // number.ToString - const isNumberToString = ts.isPropertyAccessExpression(expression.expression) + const isNumberToString = ts.isPropertyAccessExpression(expression.expression) && this._context.typeChecker.getTypeAtLocation(expression.expression.expression).flags & ts.TypeFlags.Number && (expression.expression.name as ts.Identifier).text === 'toString' && expression.arguments.length === 0; - if(isNumberToString) { + if (isNumberToString) { const invariantCultureInfo = { parent: parent, nodeType: cs.SyntaxKind.MemberAccessExpression, diff --git a/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs b/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs index b1d79e027..c7207f92e 100644 --- a/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs +++ b/src.csharp/AlphaTab/Core/Dom/TextEncoder.cs @@ -3,7 +3,7 @@ namespace AlphaTab.Core.Dom { - public class TextEncoder + internal class TextEncoder { private readonly Encoding _encoding; diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Map.cs b/src.csharp/AlphaTab/Core/EcmaScript/Map.cs index 8aeb2ce20..fe404c4ec 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Map.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Map.cs @@ -152,5 +152,10 @@ TValue IDictionary.this[TKey key] ICollection IDictionary.Keys => _data.Keys; ICollection IDictionary.Values => _data.Values; + + public IEnumerable Values() + { + return _data.Values; + } } } diff --git a/src.csharp/AlphaTab/Core/TypeHelper.cs b/src.csharp/AlphaTab/Core/TypeHelper.cs index cc77bc7b2..6c41cb724 100644 --- a/src.csharp/AlphaTab/Core/TypeHelper.cs +++ b/src.csharp/AlphaTab/Core/TypeHelper.cs @@ -16,6 +16,11 @@ public static IList CreateList(params T[] values) return new List(values); } + public static IEnumerable SetInitializer(params T[] values) + { + return new List(values); + } + public static IList Splice(this IList data, double start) { var count = data.Count - (int) start; diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 61ab6d1f0..60a20fdec 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -21,6 +21,7 @@ import { MusicFontSymbol } from '@src/model/MusicFontSymbol'; import { Note } from '@src/model/Note'; import { NoteAccidentalMode } from '@src/model/NoteAccidentalMode'; import { Ottavia } from '@src/model/Ottavia'; +import { PercussionMapper } from '@src/model/PercussionMapper'; import { PickStroke } from '@src/model/PickStroke'; import { PlaybackInformation } from '@src/model/PlaybackInformation'; import { Score } from '@src/model/Score'; @@ -30,6 +31,7 @@ import { SlideOutType } from '@src/model/SlideOutType'; import { Staff } from '@src/model/Staff'; import { Track } from '@src/model/Track'; import { TripletFeel } from '@src/model/TripletFeel'; +import { Tuning } from '@src/model/Tuning'; import { VibratoType } from '@src/model/VibratoType'; import { Voice } from '@src/model/Voice'; import { TextBaseline } from '@src/platform/ICanvas'; @@ -503,9 +505,6 @@ export class GpifWriter { } } - private static readonly defaultAccidentals: string[] = ['', '#', '', '#', '', '', '#', '', '#', '', '#', '']; - private static readonly defaultSteps: string[] = ['C', 'C', 'D', 'D', 'E', 'F', 'F', 'G', 'G', 'A', 'A', 'B']; - private writePitchForValue(properties: XmlNode, propertyName: string, value: number, accidentalMode: NoteAccidentalMode) { let index = 0; let octave: number = 0; @@ -517,21 +516,14 @@ export class GpifWriter { index = value % 12; octave = (value / 12) | 0; - step = GpifWriter.defaultSteps[index]; - accidental = GpifWriter.defaultAccidentals[index]; + step = Tuning.defaultSteps[index]; + accidental = Tuning.defaultAccidentals[index]; }; updateParts(); switch (accidentalMode) { case NoteAccidentalMode.Default: break; - case NoteAccidentalMode.SwapAccidentals: - if(accidental === '#') { - value += 1; - updateParts(); - accidental = 'b'; - } - break; case NoteAccidentalMode.ForceNone: accidental = ''; break; @@ -542,21 +534,21 @@ export class GpifWriter { accidental = '#'; break; case NoteAccidentalMode.ForceDoubleSharp: - if(accidental === '#') { + if (accidental === '#') { value -= 2; updateParts(); } accidental = 'x'; break; case NoteAccidentalMode.ForceFlat: - if(accidental === '#') { + if (accidental === '#') { value += 1; updateParts(); } accidental = 'b'; break; case NoteAccidentalMode.ForceDoubleFlat: - if(accidental === '#') { + if (accidental === '#') { value += 2; updateParts(); } @@ -1059,8 +1051,8 @@ export class GpifWriter { for (const voice of bar.voices) { for (const beat of voice.beats) { const soundAutomation = beat.getAutomation(AutomationType.Instrument); + const isTrackSound = bar.index === 0 && beat.index === 0; if (soundAutomation) { - const isTrackSound = bar.index === 0 && beat.index === 0; const name = isTrackSound ? trackSoundName : `ProgramChange_${beat.id}`; const path = isTrackSound ? trackSoundPath : `Midi/${soundAutomation.value}`; const role = isTrackSound ? trackSoundRole : 'User'; @@ -1070,6 +1062,7 @@ export class GpifWriter { trackSoundName, trackSoundPath, trackSoundRole, track.staves[0].bars[0].index, track.playbackInfo.program ); + trackSoundWritten = true; } this.writeSoundAndAutomation(soundsNode, automationsNode, @@ -1121,58 +1114,60 @@ export class GpifWriter { this.writeSimplePropertyNode(properties, 'CapoFret', 'Fret', staff.capo.toString()); this.writeSimplePropertyNode(properties, 'FretCount', 'Fret', "24"); - const tuningProperty = properties.addElement('Property'); - tuningProperty.attributes.set('name', 'Tuning'); - tuningProperty.addElement('Pitches').innerText = staff.tuning.slice().reverse().join(' '); - tuningProperty.addElement('Label').setCData(staff.tuningName); - tuningProperty.addElement('LabelVisible').innerText = staff.tuningName ? "true" : "false"; - tuningProperty.addElement('Flat'); - - switch (staff.tuning.length) { - case 3: - tuningProperty.addElement('Instrument').innerText = 'Shamisen'; - break; - case 4: - if (staff.track.playbackInfo.program === 105) { - tuningProperty.addElement('Instrument').innerText = 'Banjo'; - } else if (staff.track.playbackInfo.program == 42) { - tuningProperty.addElement('Instrument').innerText = 'Cello'; - } else if (staff.track.playbackInfo.program == 43) { - tuningProperty.addElement('Instrument').innerText = 'Contrabass'; - } else if (staff.track.playbackInfo.program == 40) { - tuningProperty.addElement('Instrument').innerText = 'Violin'; - } else if (staff.track.playbackInfo.program == 41) { - tuningProperty.addElement('Instrument').innerText = 'Viola'; - } else { - tuningProperty.addElement('Instrument').innerText = 'Bass'; - } - break; - case 5: - if (staff.track.playbackInfo.program === 105) { - tuningProperty.addElement('Instrument').innerText = 'Banjo'; - } else { - tuningProperty.addElement('Instrument').innerText = 'Bass'; - } - break; - case 6: - if (staff.track.playbackInfo.program === 105) { - tuningProperty.addElement('Instrument').innerText = 'Banjo'; - } else if (staff.track.playbackInfo.program <= 39) { - tuningProperty.addElement('Instrument').innerText = 'Bass'; - } else { - tuningProperty.addElement('Instrument').innerText = 'Guitar'; - } - break; - case 7: - if (staff.track.playbackInfo.program <= 39) { - tuningProperty.addElement('Instrument').innerText = 'Bass'; - } else { + if (staff.tuning.length > 0) { + const tuningProperty = properties.addElement('Property'); + tuningProperty.attributes.set('name', 'Tuning'); + tuningProperty.addElement('Pitches').innerText = staff.tuning.slice().reverse().join(' '); + tuningProperty.addElement('Label').setCData(staff.tuningName); + tuningProperty.addElement('LabelVisible').innerText = staff.tuningName ? "true" : "false"; + tuningProperty.addElement('Flat'); + + switch (staff.tuning.length) { + case 3: + tuningProperty.addElement('Instrument').innerText = 'Shamisen'; + break; + case 4: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else if (staff.track.playbackInfo.program == 42) { + tuningProperty.addElement('Instrument').innerText = 'Cello'; + } else if (staff.track.playbackInfo.program == 43) { + tuningProperty.addElement('Instrument').innerText = 'Contrabass'; + } else if (staff.track.playbackInfo.program == 40) { + tuningProperty.addElement('Instrument').innerText = 'Violin'; + } else if (staff.track.playbackInfo.program == 41) { + tuningProperty.addElement('Instrument').innerText = 'Viola'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } + break; + case 5: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } + break; + case 6: + if (staff.track.playbackInfo.program === 105) { + tuningProperty.addElement('Instrument').innerText = 'Banjo'; + } else if (staff.track.playbackInfo.program <= 39) { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + } + break; + case 7: + if (staff.track.playbackInfo.program <= 39) { + tuningProperty.addElement('Instrument').innerText = 'Bass'; + } else { + tuningProperty.addElement('Instrument').innerText = 'Guitar'; + } + break; + default: tuningProperty.addElement('Instrument').innerText = 'Guitar'; - } - break; - default: - tuningProperty.addElement('Instrument').innerText = 'Guitar'; - break; + break; + } } this.writeSimplePropertyNode(properties, 'PartialCapoFret', 'Fret', "0"); @@ -1368,10 +1363,16 @@ export class GpifWriter { private writeInstrumentSetNode(trackNode: XmlNode, track: Track) { const instrumentSet = trackNode.addElement('InstrumentSet'); - instrumentSet.addElement('LineCount').innerText = track.staves[0].standardNotationLineCount.toString(); + const firstStaff:Staff = track.staves[0]; + + instrumentSet.addElement('LineCount').innerText = firstStaff.standardNotationLineCount.toString(); + + if (track.percussionArticulations.length > 0 || firstStaff.isPercussion) { + const articulations = track.percussionArticulations.length > 0 + ? track.percussionArticulations + : Array.from(PercussionMapper.instrumentArticulations.values()); - if (track.percussionArticulations.length) { instrumentSet.addElement('Name').innerText = GpifWriter.DrumKitProgramInfo.instrumentSetName; instrumentSet.addElement('Type').innerText = GpifWriter.DrumKitProgramInfo.instrumentSetType; let currentElementType: string = ""; @@ -1379,7 +1380,7 @@ export class GpifWriter { let currentArticulations: XmlNode = null!; let counterPerType = new Map(); const elements = instrumentSet.addElement('Elements'); - for (const articulation of track.percussionArticulations) { + for (const articulation of articulations) { if (!currentElementType || currentElementType !== articulation.elementType) { var currentElement = elements.addElement('Element'); @@ -1493,8 +1494,8 @@ export class GpifWriter { } if (masterBar.isSectionStart) { const section = masterBarNode.addElement('Section'); - section.addElement('Letter').innerText = masterBar.section!.marker; - section.addElement('Text').innerText = masterBar.section!.text; + section.addElement('Letter').setCData(masterBar.section!.marker); + section.addElement('Text').setCData(masterBar.section!.text); } if (masterBar.isRepeatStart || masterBar.isRepeatEnd) { diff --git a/src/importer/AlphaTexImporter.ts b/src/importer/AlphaTexImporter.ts index d9d0a6816..4138b6c46 100644 --- a/src/importer/AlphaTexImporter.ts +++ b/src/importer/AlphaTexImporter.ts @@ -984,9 +984,6 @@ export class AlphaTexImporter extends ScoreImporter { this.beatDuration(); let beat: Beat = new Beat(); voice.addBeat(beat); - if (voice.bar.masterBar.tempoAutomation && voice.beats.length === 1) { - beat.automations.push(voice.bar.masterBar.tempoAutomation); - } // notes if (this._sy === AlphaTexSymbols.LParensis) { this._sy = this.newSy(); @@ -1715,7 +1712,7 @@ export class AlphaTexImporter extends ScoreImporter { this.error('tempo', AlphaTexSymbols.Number, true); } let tempoAutomation: Automation = new Automation(); - tempoAutomation.isLinear = true; + tempoAutomation.isLinear = false; tempoAutomation.type = AutomationType.Tempo; tempoAutomation.value = this._syData as number; master.tempoAutomation = tempoAutomation; @@ -1762,5 +1759,13 @@ export class AlphaTexImporter extends ScoreImporter { } } } + + if(master.index === 0 && !master.tempoAutomation) { + let tempoAutomation: Automation = new Automation(); + tempoAutomation.isLinear = false; + tempoAutomation.type = AutomationType.Tempo; + tempoAutomation.value = this._score.tempo; + master.tempoAutomation = tempoAutomation; + } } } diff --git a/src/importer/Gp3To5Importer.ts b/src/importer/Gp3To5Importer.ts index ee0d83297..4860b8bb0 100644 --- a/src/importer/Gp3To5Importer.ts +++ b/src/importer/Gp3To5Importer.ts @@ -40,6 +40,7 @@ import { Voice } from '@src/model/Voice'; import { Logger } from '@src/Logger'; import { ModelUtils } from '@src/model/ModelUtils'; import { IWriteable } from '@src/io/IWriteable'; +import { Tuning } from '@src/model/Tuning'; export class Gp3To5Importer extends ScoreImporter { private static readonly VersionString: string = 'FICHIER GUITAR PRO '; @@ -876,13 +877,13 @@ export class Gp3To5Importer extends ScoreImporter { newNote.rightHandFinger = IOHelper.readSInt8(this.data) as Fingers; newNote.isFingering = true; } + let swapAccidentals = false; if (this._versionNumber >= 500) { if ((flags & 0x01) !== 0) { newNote.durationPercent = GpBinaryHelpers.gpReadDouble(this.data); } let flags2: number = this.data.readByte(); - newNote.accidentalMode = - (flags2 & 0x02) !== 0 ? NoteAccidentalMode.SwapAccidentals : NoteAccidentalMode.Default; + swapAccidentals = (flags2 & 0x02) !== 0; } beat.addNote(newNote); if ((flags & 0x08) !== 0) { @@ -894,6 +895,15 @@ export class Gp3To5Importer extends ScoreImporter { newNote.string = -1; newNote.fret = -1; } + if(swapAccidentals) { + const accidental = Tuning.defaultAccidentals[newNote.realValueWithoutHarmonic % 12]; + if(accidental === '#') { + newNote.accidentalMode = NoteAccidentalMode.ForceFlat; + } else if(accidental === 'b') { + newNote.accidentalMode = NoteAccidentalMode.ForceSharp; + } + // Note: forcing no sign to sharp not supported + } return newNote; } diff --git a/src/importer/GpifParser.ts b/src/importer/GpifParser.ts index 4e21a0f24..2fb41a7a0 100644 --- a/src/importer/GpifParser.ts +++ b/src/importer/GpifParser.ts @@ -1897,6 +1897,10 @@ export class GpifParser { break; case 'Octave': note.octave = parseInt(c.findChildElement('Number')!.innerText); + // when exporting GP6 from GP7 the tone might be missing + if(note.tone === -1) { + note.tone = 0; + } break; case 'Tone': note.tone = parseInt(c.findChildElement('Step')!.innerText); @@ -2217,42 +2221,43 @@ export class GpifParser { trackIndex++; } } + } - // clear out percussion articulations where not needed - // and add automations - for (let trackId of this._tracksMapping) { - if (!trackId) { - continue; - } - let track: Track = this._tracksById.get(trackId)!; + // clear out percussion articulations where not needed + // and add automations + for (let trackId of this._tracksMapping) { + if (!trackId) { + continue; + } + let track: Track = this._tracksById.get(trackId)!; - let hasPercussion = false; - for (const staff of track.staves) { - if (staff.isPercussion) { - hasPercussion = true; - break; - } - } - if (!hasPercussion) { - track.percussionArticulations = []; + let hasPercussion = false; + for (const staff of track.staves) { + if (staff.isPercussion) { + hasPercussion = true; + break; } + } + if (!hasPercussion) { + track.percussionArticulations = []; + } - if (this._automationsPerTrackIdAndBarIndex.has(trackId)) { - const trackAutomations = this._automationsPerTrackIdAndBarIndex.get(trackId)!; - trackAutomations.forEach((automations, barNumber) => { - if (track.staves.length > 0 && barNumber < track.staves[0].bars.length) { - const bar = track.staves[0].bars[barNumber]; - if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { - const beat = bar.voices[0].beats[0]; - for(const a of automations) { - beat.automations.push(a); - } + if (this._automationsPerTrackIdAndBarIndex.has(trackId)) { + const trackAutomations = this._automationsPerTrackIdAndBarIndex.get(trackId)!; + trackAutomations.forEach((automations, barNumber) => { + if (track.staves.length > 0 && barNumber < track.staves[0].bars.length) { + const bar = track.staves[0].bars[barNumber]; + if (bar.voices.length > 0 && bar.voices[0].beats.length > 0) { + const beat = bar.voices[0].beats[0]; + for (const a of automations) { + beat.automations.push(a); } } - }); - } + } + }); } } + // build masterbar automations this._masterTrackAutomations.forEach((automations, barNumber) => { let masterBar: MasterBar = this.score.masterBars[barNumber]; diff --git a/src/model/Beat.ts b/src/model/Beat.ts index c814d7070..196b70d12 100644 --- a/src/model/Beat.ts +++ b/src/model/Beat.ts @@ -413,7 +413,7 @@ export class Beat { /** * Gets or sets how the beaming should be done for this beat. */ - public beamingMode:BeatBeamingMode = BeatBeamingMode.Auto; + public beamingMode: BeatBeamingMode = BeatBeamingMode.Auto; public addWhammyBarPoint(point: BendPoint): void { this.whammyBarPoints.push(point); @@ -447,7 +447,7 @@ export class Beat { } } } - + if (point === this.minWhammyPoint) { this.minWhammyPoint = null; for (let currentPoint of this.whammyBarPoints) { @@ -554,6 +554,14 @@ export class Beat { } public finish(settings: Settings): void { + if (this.getAutomation(AutomationType.Instrument) === null && + this.index === 0 && + this.voice.index === 0 && + this.voice.bar.index === 0 && + this.voice.bar.staff.index === 0) { + this.automations.push(Automation.buildInstrumentAutomation(false, 0, this.voice.bar.staff.track.playbackInfo.program)); + } + let displayMode: NotationMode = !settings ? NotationMode.GuitarPro : settings.notation.notationMode; let isGradual: boolean = this.text === 'grad' || this.text === 'grad.'; if (isGradual && displayMode === NotationMode.SongBook) { @@ -568,6 +576,7 @@ export class Beat { let isEffectSlurBeat: boolean = false; for (let i: number = 0, j: number = this.notes.length; i < j; i++) { let note: Note = this.notes[i]; + note.dynamics = this.dynamics; note.finish(settings); if (note.isLetRing) { this.isLetRing = true; @@ -726,11 +735,11 @@ export class Beat { cloneNote.id = Note.GlobalNoteId++; // fix ties - if(note.isTieOrigin) { + if (note.isTieOrigin) { cloneNote.tieDestinationNoteId = note.tieDestination!.id; note.tieDestination!.tieOriginNoteId = cloneNote.id; } - if(note.isTieDestination) { + if (note.isTieDestination) { cloneNote.tieOriginNoteId = note.tieOrigin ? note.tieOrigin.id : -1; note.tieOrigin!.tieDestinationNoteId = cloneNote.id; } @@ -790,8 +799,8 @@ export class Beat { return null; } - public chain() { - for(const n of this.notes) { + public chain() { + for (const n of this.notes) { this.noteValueLookup.set(n.realValue, n); n.chain(); } diff --git a/src/model/NoteAccidentalMode.ts b/src/model/NoteAccidentalMode.ts index 2c9b0ac2e..9bb651eae 100644 --- a/src/model/NoteAccidentalMode.ts +++ b/src/model/NoteAccidentalMode.ts @@ -6,10 +6,6 @@ export enum NoteAccidentalMode { * Accidentals are calculated automatically. */ Default, - /** - * If the default behavior calculates a Sharp, use flat instead (and vice versa). - */ - SwapAccidentals, /** * This will try to ensure that no accidental is shown. */ diff --git a/src/model/PercussionMapper.ts b/src/model/PercussionMapper.ts index 1ee7c5763..a8f859f10 100644 --- a/src/model/PercussionMapper.ts +++ b/src/model/PercussionMapper.ts @@ -74,7 +74,7 @@ export class PercussionMapper { * } * copy(s) */ - private static instrumentArticulations: Map = new Map([ + public static instrumentArticulations: Map = new Map([ [38, new InstrumentArticulation("snare", 3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole)], [37, new InstrumentArticulation("snare", 3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack)], [91, new InstrumentArticulation("snare", 3, 38, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite)], diff --git a/src/model/Tuning.ts b/src/model/Tuning.ts index e0937bfb2..76db73ad5 100644 --- a/src/model/Tuning.ts +++ b/src/model/Tuning.ts @@ -8,6 +8,9 @@ export class Tuning { private static _fourStrings: Tuning[] = []; private static _defaultTunings: Map = new Map(); + public static readonly defaultAccidentals: string[] = ['', '#', '', '#', '', '', '#', '', '#', '', '#', '']; + public static readonly defaultSteps: string[] = ['C', 'C', 'D', 'D', 'E', 'F', 'F', 'G', 'G', 'A', 'A', 'B']; + public static getTextForTuning(tuning: number, includeOctave: boolean): string { let parts = Tuning.getTextPartsForTuning(tuning); return includeOctave ? parts.join('') : parts[0]; diff --git a/src/xml/XmlNode.ts b/src/xml/XmlNode.ts index 683977d9d..cf3521b61 100644 --- a/src/xml/XmlNode.ts +++ b/src/xml/XmlNode.ts @@ -90,6 +90,9 @@ export class XmlNode { public get innerText(): string { if (this.nodeType === XmlNodeType.Element || this.nodeType === XmlNodeType.Document) { + if(this.firstElement && this.firstElement.nodeType === XmlNodeType.CDATA) { + return this.firstElement.innerText; + } let txt: string = ''; for (let c of this.childNodes) { txt += c.innerText?.toString(); diff --git a/test-data/conversion/full-song.gp5 b/test-data/conversion/full-song.gp5 new file mode 100644 index 0000000000000000000000000000000000000000..f966639ddd76d88d2424839c2d34d4eac2f60288 GIT binary patch literal 62391 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 literal 0 HcmV?d00001 diff --git a/test-data/conversion/full-song.gpx b/test-data/conversion/full-song.gpx new file mode 100644 index 0000000000000000000000000000000000000000..2ffd76537cb863223a5df8e4a1e8af5fae69bc23 GIT binary patch literal 218810 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%0D)0 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

    )|F^5CV26nB-~1> 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

    aw}NcOtrc zQJNc~t6{ny{&M?0`I%PPA3#p9Hnqd3F^MK@OaklmpjdB#GCjmT%^u@8?CU{V1|J6? zLHK&YFAT{U-f_j=QC6XYDnt!sbOtPAM%-MAeOvK38!W z=kC}(*F9LD>xUY66r&TVXcpa=HlC40>XMWctU6|g0Yg?p%6=*&(0 zqK5`XeGxlapvHnKr$v~Xn2Tz8BQ9g!pX1U|lifJU#=Rq0Hzh`70GWV+81P|XAO`9R^GQk#Ry7khzLblt;ZCty z7YC(X7i`RRk%4N((xYnVav`Cc`qSja6PKP{M`|1YPdr9HMjP)D3&SRz0&4?g0ZeVU zj2Qny09C~Q02D>Guj93iA%EEbFbVmLETAEOqfUa5Pd~g&yk9ITAAR*9AQ!guLqJ6& zFc&@imxmBCJR}#J`8%2m{Ex1kmF~ML4q;a1BMhh^mHdnbT!Bg7aM9ALSEvW4Y8WLi z8}i7Ib6Qq_N?yzAPzZ!pf!Y5BH%qwS=w~0Oyhrt66^wOIGO&6c_iH=LNW1rlsDB)G zBDf5{xkp$5+n5TNaH{Yg9c0*a%AwF(g|^<2B2i<2Xg1gbRNV^29y;`zu>Mn(5d60QxgS(d7A~)Xh07RCT?^BOVLhr!wT)qWS=5YfWX|}pr z-acM>efl@vMZz#R&W2fpYKiF`%iQeh^mFTB=%?EAt&K_Qnyy<>uztSd3eq39Ur9W3 z&UI^EJq)zXfE^sUpJ+Nj-(IHHOFmrympdk&#!mX_9@O-B`l^S{Wq2q5fa?x4fr{~A zJ^a4m;E!gILOM8ej`0qDA2h#0mO0sOR6LQE@Q zBhu&K9kwDhVDr(>L`?}T>dnXTDC0vB#%`_QCvgv`sI|==JMGvQZ5Vl?4k`KiayS?n(|hZ$j^J`>T{xxgWz4Ma4@Qb`QN$|L2~atLGHPISK- z)C_{b_-B5`V@=kubfABK!;Hl6pY1#Z^s|O%BwPVKME_QeKs<~+e#Js+1sRW|4G zC6KcQo|Iw|taQ?c`7mD>gfEW>!q_-jWb@Fi;vs8Eh8Tz9#b2LS17p#;B)|T&7j{rP zQGSaKk#ZYKoyx>Y7zAI7ETVGlNw7QN^%Z#i0iA8RAsF@W4aK~&rP@-XfQ0tGF;$3s zHzdIX`yn4(a6ksMsYm*ta|tIO^*8xvpf1m4Y5Ju>m?`m>0s4@xi?Up)FIzP z|3&k4a&&spux5CTVky#S2Vj=sNfb+AHZD{b&`-ka)nnyOVPE(j%!9dS0mL+E@)*1v zlSV95(MAy(&ZsC!1slOeL30tM92XHB&Iqf;k{15pxoTE@eWP^VE-9}?#C zQ9m!QNEsU~a$HJrZveYUkJ9Ln;K9_7KJbC}ZxhUQJE<2-g6x{f_QC-6T8gqKhPB`qh-wD%E2fZ zQ(eN73!#3v3_jefJ3RhbI@BM+LOq&A_1CwJ>oiV7EXEk)FUB_*2BFgi$va%imOD5w zJ(=uFPCxUIk3FUCFF4IjTPn^_ zFK=AlHP~G%x(6)|swt!K=l^bX`-TFnROtIjN3=Dr4Q~z6Y{?3)8Gw>Or2FSYUcU>p${rw7uC2!KND?+E2?``eI<(U!g=r8 zQ%+PVg*g&JDysqxK>L^i(_#&CVRUv)SnfHs3lFar-uQ~D*Tsa5D)ZiHSq@TNv1VO3 z^_#~wyX%=^TC!<4+6JcafGAd;tHvB;?WOoqGXlFfWm@ z7<&gEC%gkrGWba_rT_Ow>$LNz#B2@U@trCf!eMU0QH+&X^T3s^`Pdu)h#NqRp~VSI zxV+m8^yls%CIat(Li|BUvgzlz}Arn?Ro&+ux*z^*8;Ex*LdC{{r!|9*{kvRR02f+Sq`LN-g3s zJKsV10yHQDcEzd`@?NW5-6?!$6})f6J4~3mS|iT-uHP=Ni`NXg)q@c>S(A6e6z&b^ zsXg?lh0@BH|FZC6u7}xPJ#*E*N~ln>>UL%8^`$mmEPD=X_gin7AL1IlPq#y4!++=|@An2=ttRNNS2 zSXk)zyWRYlZP^MZdr^{8b$PhW$vG}f*9Ynlo5QttLqGWY%f}}CMxKy~p!x)=Cs98t zao~R7q>x;vtRU#LkFTs`B-2xdi4Ka%xf=gXpa`Mb)M{v)ei+gI{=W7gsp#O)}xo-n92@5t1-(Am`Lv^BXl?bp3bn7v4?mHxF8=H zT&Ju|wH!WX{5Y-2lPtBwZ*!?yI0EiMXZ7;+_KT!{zpf4$hvVU7`Qyhc;PEmpE?RnWM7-8Cyo?Mk+0Qhy zdDEHNl)WZKGU=|4o1{LF^zRw|oWi#=c|ka`EJNX-_dZsHS06ViJ->(xSEnR&w8_Mb z|0yU4N0r49gPbNE#o=*=Pwt;5_Wt!hzP!ZWQgM)z!TtQtKX3mkwB8zYkpKJdUs)`P zpO;+2UDz5P1t%Ijx#YBi@Z`LR+3^kVeX%tpMJC~Lrjy|#UBbEGRJb_7bSnIh%ed0- z_q~2nT6BBlas10)z}_aT;Kh}-=;rIP3|6Mps}~m+8F8spT-Og5LK+*t-+XYv(Z6@Q zUCg$BSzlzt$s42%R+nb9Q8b({-n4b|+vT#FOvK^Vr*X_U;8fb4S=+jm(h?eH3zOPd zC$;o&xWy5~Oq!~{V@569tD?{vs$lNE7HEHVeIwS5vT4W#C(Ah>-X$pIH*ajUeW1I} z^8hnDXfaMep1&cD?#je6MEv5yB5JdddSIG@>xNz43!_Nat@2=QA574^m>=lLaQD#C zg3lozt<7->hl>KJPuCC{N;}(B_^k>IT^l-s71eJy{_~YbKeFkkgMTfcavncPI9mEL zY#TvoNI%4aAmEqzW@+qEh=c1!s^;V8OY-+irzV;m!3PVAfUiC8cxo^SE34 z31>R0n=LJkWO#-J{&fd4F)b#e>ew>Ef~!|6;+iQl0|MRLY`psVqvC7iIVSm>uE%iO z7e1(sAh+W3@tE+g?%GxdC+E^yZFhgqDt)}{@}T0SF341z{E|9zdHM>N%;onzSVqZ z4QF#7fBn6bM4W=U!@<(;@dkcAOg%5J#bMX;G73318z1-ZyIU+R;rJ;it#-c?K#Hvi zyLo|YW^jgzftY^4M$D=-ZhtZQq$ifiT+F3u~QyOP%Q?ry|Kf=$MsdkZMSwe`%_ zuTQ@o#+hlv@%W%q%Wi5r+iuVXi^zk0aGFt)#-$b}INF?p?a;D~Qmq6zqQ2Y{@8My< z@*?%MuYYudW>mNW!d6EMHux_v4u_k!o2_S`i)K3;2^Lxv6)xt$0K3ZW+UBXrt+o{X zx!v89e|Bd@*kw1i$HP*Zny7YFXO{AVa85nR852KKKt8kgWO)*^ z^;1$CgJ%R$aWan4{0=@;NCT6t>2BVvZm+)F;+l(vM$~=j83ii3+ur1G7SY0|(t7UQ zLl;TuYE4a^8F{6Mrt0Cby}Yz7PQ%$(H|1t(Xr2*m?VIGk1nuhEDHqe?=qz8ah3Eq9 z^#z=~=VmfNABo$Z5-yc?HMehOoyV{9@$`awsv0}xgK+p_nWM*lC&gD6=Pjld?(-k) zto}WCDd9{{SBn#mJpQ=FVkZslIEDSzyROt6yG3LTn67f{f>xIYkekeHeeFG&aN9?A zd}BOUMk^18Bj`joA1flnbfg~kAgklj*1EafC{mfW%d4OC5?u(k1imzJ=YSbO)xS3U z>G8aAuV454Q?dSyBTuC47~7F8x9Ix2v)p^L>%$^*^MY`Oa^YL8s!eT9|L{9e&U40u zUefh+Zb9l|+K2tL+Rh8DZ7ncNGLR($5fw*Ho?I~l@9pOP+v<{WN&}iDp#em%OG|@r z1jh_Me`||+pth~=UMACEUVRNXy^9v_m_#^NclqEV3S)t>^s8RSAMxe8?1nUUYN#M}>4=n+l~hBs5`WC)rf1OL0hpp=<1C z0|BVFQ0KeqZk}${ndCGDmK&XA7g=B2cnt4GERKxN;bcJR)bUzVb-M;GY0!gFPg>2) zf{k8Xd=-Wy>uk~?;O2avQEge?v3kOmixZWYN)LtFx%=(5*XJuxUCw@Yz*NADw$pF7f0Vn#q|m0)5hrU9q)BLM%iy=R zB`=^@d;7TYBJr|T0lPOGJ;0sJiiY3bxQsi?q)^9^)?HiOwDsXYtL3AX&6IgKJb4wf zbQyl*J{I>7Nh!Vl2HYul>hWN8tt<~7kYi&q${)J)7a<}p7|G_Ia ztiE7z5LG4~hDo$FleZ?%@;#jNtjHv<050_Dt(Cif0Y{dZXray5F#pxokM0B0%A5ju zqAQf-J`yJmc&3>Z7TRpm*?yt4x!K{@k0z>>3HRDsnw?V&8J2f{B>&_(xef4SQJSs0 z+nRzQGn2}M$FTKZZy2AyM2DlMcw0k0;}MuUht^^McYz1oHzFiglom+nPIP z!ASj*V-)nPP$pR6%F|ZD@qt%62VgXceOQfQL7@?frnKQ`+E~qs(#u|!l*G*|G7Zvx zvg(>jdF-~_8Nnw42?U&K&AJCIA+>SeuUftP=tccyv2heXn96e#kHbx=Jc-{(-@AK~ zy*^y`SF|)J2Z!?rvb+*;BfPq{%(s)W0H8M9GU+_o7rvPd(-YB+_3v;NvCGnuPwQ>gMKc8j#~yzMdsqup4=mCE;b>O}%+rZKu@*=(Y0i zdR*J~Dl&jDJGwby3E^64W5hOsT#n7dcCxdtwgPNBuYUHT4_fa1QTp*haI<1lxS+HR z;&ba>r9XpkxT-~=YkgQu{j6+mqxH0p#D>k<(|SqrHH`(_qHTx6Wfz`ga|q?7oeiz+ z&b}9w4>}xVvDn!Ka(MhA;^yi3GVe&KaM^tthjA$Qsu8D_6H8X&bAAnKPCC(Q9T@6u@6BXiFymOAnt!Vhu5oMG z-gw{uTvSM(>N|3!8Z%?X#SgQu9Y^m zPt|bVGfx4BlRaEIeyHAs35cpDmiGGrs!Ro;^j_`5X1HB6IB+k0C-W-&OJi-lphZ%}qvqN%Vnyv$b?#0fm4~uFnbz5j(5}yKhoffFg)#>QR@m47f z94Ya62fshg+IyeZy$Ji4_Aj}>#2RpfS?rEhh%2!H6z{zUS@xh?G}HtKX%whdR$5+q zU|ZQ`d8v78vvXX&uA7#=+XVf`rwMJPuZ}Jyl=7{1b-GPtX2a#Rd3mJkW;UvA)unAo z%DMNn+BG(B2{bnLb@$t&wdx*3#3*eJLo@h_(G8lTn%(#Yq=mqRgzcJ^PQV59$POj; zcmtR#4rC#|kyOMr2P}M+5o3a@t2$$Hc~dSYhfDKM=nARpZr&P4QAkej6EH7W0#}nc z4qR<}@I@1DA)!+BZDvpF8Rz6hKrhz1F~fSJYQj1~6Q8)Ca2YGu4FI7eH@-;Qh~rp6 zT%Ad6DfP%KEpH`nGu#v$wV2S>ke!{ANA(Nz{k*mt4w(@tEtM+#o7vpFwVdY2D104ZW2{L6LI5j>+M?5M86cAT6n|k zw9Z*2fw2}&)kv5?JOh<|=nOCBwJ6e~nwv(KT&D-0&+u5@1&XefhadBrrQIiE!>$Pd%xaU`1b5hV59B34C z9E$fQ{-(8?ndMc?jm?2Ogf^L)U)RF;lZ^64G*1v+tejAp*+OY=p(uoUZ*b2VXxWy; zQj@>(Jw`5Q&J{BwZxL!U;p#^U0!237-lf;%y=}rf1RYz?IGbCi8R2AHyZaKoF6;&| z?YilsBBM+*orJ;8rtS{JWaorxI26MI3Dnj$fUOuw%npNr zXGbo)ANin zT`H`Cuc$rWHj`5T%kfy1|4UmlHZCngaX`a3Fm5&7$1A(9KAkNSG~r@LGjUbSHZBNF zM4X(NOct?N9%3Z7(2`1+{6omY_$gb?r0S}!V&48pS|1-(U}jRN=IEI5wuPVEN>#P2 zT=|Q>GkGQtuD*3L+e?2%EIeU#r6?B|x(&aUz>|&Ka^|Y?#_uFjmDt^Sx zGo*653TO=gi<>u6ITy!`SW{s__p`fRI=g!o>=CzFbJzN!NlJL^jNE>2!*<5!Qy+vo z+4dPeAOMD~XBf7=?hc;bb{94|TCr!{q&YtS>p_%1F^EaT1tc$~6h*e&ikN zqLul;731jpH!}6??BlCtf~L$bv;jt6+S!Z@%nE6q-YoZiR#g0T1gNjmPG{7fDecg3 zcK&sjvZV_yk4powq_Q?P>MY@1M;l-y4P{*gFC5Nw*R}fi8@Gq5H~jF5PsL5SyWQ5t z+h1TKIOONy>)b=`K_QN&;uy+z20SihfbWQmNnEqEz#LG8SH(xd)vGdJJN6oIu)O->HBt~>BadjfLNox4~s1*;^t^~6L2^qaoEG) z(WY7v6l`@4pRt-eKEPt86S&@$_wC#Xk%TN0vzrCy7UZ)F`7{rpg^=x1rnMy7K5)m$ zxG!LxzVrOcF8YsFh1>$crQj=v0O^0~P{cHK+D zXB$27+uhf1A6rKX8n4^%eT?DKJlP-p&s~amSYwk@Hn|zTYLT)o%MIA?EFdYdr!VKx zR?t4H4H#=t3A;o1t>aa4u3ENLt0e0t>-zY+Gmpw=1ct0y>Yxq8Oddd>n~w6&)X z1E8FKP4S~bquDgoN{^7XYOFXi4=W%3}>ckLr|bUgsw zBQxYE&k{%75gdM-aH&?%>;#Mf^jFXkhAH6lKV;q#E^}?K}Np#YL_%IIl66bdsbns&M z0_1fS5F@7JS9vp8#H-}?buPMPi_8Vg`o8)``}AU?3mluv&^(TG0kYB?%9Dx8yROw` z-zZkyKSJQuW5{?@E2h`ci5v4+ZWHa}>*KlRMx5_tA6xzcG;wRPuR_N7y%Ytyd|GVG z{5%dw6t&gs!#0Mulnyi`IVaE3E!#_HvEXtju6kH*ky)XZ_8`!qN~LYr?u0@TywOII z&rQ!SqzQK7rvuHyIV&AfYYkQJB;ReIU%}si8>#Bp`ZcjjK9`#zDv{XKnzZqaB7l4{ z87HGkDW}-RCHpxX%$Y4hEDyFgL!bH{cZ_?hsRhR_puRAfc?GD8pN?Z`OIKrZTh7lx z?Km9ORg3RTp#&D~*~j$rT4)CvKg9QV*JU${sJW&(#}c|5S{_oMz@*DsI-rpsXv=Un zuGoy1C9kS*M*0q1sL@9%&Mo2;!fI{ZnM0jvI+~U+y~1+igJ0UcKfB?c9#3#ecmJN_7;$|i9r89WZcqxt11T@AqVr&JXl&7~n zJjk%zs{qhx1zn{rwGUcjlZDGsFdNiH1>G`+w;OW-3x>}(2I1KB8Nrv}Q2w~eQNXWl zpL{m^2r0fnCMX)kRZ(<*vx?WEv6-?!`!0*_<)z1B;^Z7COUdQyS}HJ* z37@3Wd?1$tk{1*u7sSCOik^Md+1E=NZ>3TT=TZr{g(oBY3E&`V{t-Cbg0Rj^`udRU znekyje2m^Bp|z{QS;N`f7er$}?oxQ_rkC@KjNT2}R0~N0Y`RHv*6o_toptI~!lCO% z>$j2yOjK#+bHg?L$at;4H8(80PnbVIS&)3!%hlT}NK0*8@QEuTvRU5joTRbG*4NVu zXj7klY-4J$X4lfXrn3eEG}xY99i0!hIfEn}%5-;NX0x-S(A|79=}%-%>QWaVc4y4(^|pH>mb~R=IH5)ih{*fcQxJ;rwYuKZjtOaPY0pR3;@qkzwK>F z&N=@C$4rvp8gV%vHbMUDy4wobQa5>_uRrre_0TbaS2R1j1}0A$UF3AxB(&X24ckYU zDp(f0osd{t*FFWbgjv_CE(L~6Am8ELUW(N$GKv6*(QvXGACaN`NFi;XkGp4me-w6| zpc<#r(W9FU2Lf0Vq{DUIEU$%$YP{VM^PJjwkPG^RRj{WdLU=<*ThbI~pJa-+k2}&x zcVHwXH`iLThd4baP4hDe04x`-$9w{%h$ca+`o>nc|BK=0>D5=G&*jE*XBKiQKj=(? zt|sEqEyjUI77wTggevTGU&G4I0*pWk8aL&-oQnVPA9jFecHTA85a2~$KLZDV#>8SY z9XB`!_ui%nAZfL7vMv|D!P|?eU*@lJH*DQqP%s|MQ?^=%bHR`Q5SN-^RAj0Hz;=6i zYpXh-*OxVkBO}o58|JTYllUyE6cg}6PP@&Xnc>6-bnau-tcqQw$Cfh17rmkZ0 z0zy}Nuk(7@e_)f=E;5dYbJr|OYVj`k1*!g+B5+9WAA;;f-%)8n!g6#|G|8xe|d=sf}aj_6z*Y&0B=hmWzu_UA&ci z+Qnb;-u^h@^TV3ehUZ)!BK2pM!ahH5uPm$pEw_xgetN!q04e?K9Ze>Yhm$#(#-VqV zaE(qEj?)M|CU~%IYpbpLkwu5dSIs>r53zfM417zb<1KMGx7B@# zf$MhZM?;~Hn^R;|;MipYMUcBt?^0mc!XIYr>PtMmZkV*3e)ODC-ItiQ4udT9@`Xk^ z0-MmuS*m~68CP%bW^d)2guf?rY_EteB3MQ@2fZgmG<7yRwNurC9zh8wHE<2#06D~3 zm+t1yTGhuA6 z{5+*gnE%z9XDpmlhAFA(Lzi8uriX6yWO>i&_ey^iAFKuSCs}ro9qD_F7?|j&>4bN@ zj`&Qp95PzrU$-gK1hH$8ToD+?ZO)|Tb2k3&*iwF%<%+)UpABC9iuyGONs^zL1)l&} zZml)Iq56h9@>!FDa5B+poNd!##Y)AI>SNRJwehYvtS)E43*zR94CoqDyaS?~qGq$>V(D>_a5 zs}ckaJB~LJf8=AIHKvxoS^X!+3ze{^e@$g`6w(CGaX9r^=I-ZzmH8VJ5PL`y!fIgK zJdY2~gx@3Qf42;2jmfhVeudq}To`4RF!O>7SO;bwGVeC^*re0lRLOUqN{LgT>{&zi z%1ZC!LOC%wi2B|pp{2H~S~Jw z^%g_e>pL>Rm8H{C+8o3s+VZzGS1ych4ltxB2Qu8ii*X{XU*Huc+657iB0o>LWQLui z&UOvwR$pHQCJt9NJ=E@?Pt|St^Yj>OrRuaZO;oFFYCGX-EA=h9zS=Oaj%!M!PtTvR zn=~OkCDn{W`)*K=2}Ra-hYY$+SAn5Vy{EkilND7yK`63VZk40k_+D}Nn2Lb2VW>tnFD)I5CN8pFGmyou`v4088d z=y^riBh;%^xXEU)rS#R$2NvGa)>y@ayFMSQR`S^|quM|*YiYLRkr$vFIhhqT6=8;G zbEa5bT9VJ%FqqH{b!w<>LIKC(oyN_;I5%H|TQuUb^&lB@^W?f5`z_NWwi4R(PKF;A z)ty$)+A-;Ky6)Qj=|xdc+(3r&7NsKOEt+a&>5_( z-u@u$9C13|RA&>RwzM0``INwGrUSyKAOoY%HoAMUNH2$KV%*>~tzGBY%Z?JF16R43 zYzS~)tcG>^?X3WU=aKR9R^Y?XXTzdT?-5gLpASpdHZW$$3O0aRv2|UJ$s`;Rf5SD* zTCsqLJ2*q_BZ(ANQh54?>&p^Qml=JcWzbz~J!2I!^BsR{vU8xXEn}m5c|YD0MAj%h zc>E{Sx1?ve=ze*kNnwM|LZ-%^Um+jDR%RvM5zwni*^lbeb8|Q@hk{S3 zoOIb*0@5JO(ag?Bu(g=DImhs*f1PfoDU|*f3$|{vIagiXr0(Rb4I-K^k__zSad_E< za9B!ip)0A6*^M8NI#_Yu0A5O~2Ma12Iy##bTC?@-BB$po?j~)H2azS0qgr9pSz6fw z1Yyto!%uT|Lv1l72L!4E6s;0xybNVkd5yJ^fp2LaUJD|0cVFUf>o7r$U3_D)Ss~$r zZle~gD$E^RY&;ec2|*$wz^ zTe#cyicJql|6gNQ`q0$1?GHqcwMkIG#}rYl6{{FX5Q7%42B_eDKr5628fJ)sO#(6% z4Q-(jEJHx6%(aaoh-ENDEo+t@q)U(!dBN~hY2eD9bXnXLOOZ%tyzc&$=;sDtim;s`IVt&b zF8!D=EVjNGa|rD^XC5Y;P5_N1E|Q>q+VX?h$Dj8ttR)11OkP>KP2^tAPR_-5_)35i z>c%!A|1`+$%8g*MnTl`%Oz{Yp>3qc+8pf<8i zQ^;lc{8)teTTGKm2hZs3o9uRwVev3^Ya=KVy)=sI>$`sQ`!+ydsR9)P!I;yHUK|U& z7@Ts7;?L#O*Py_Xcu2L%*XD;D#tja z%gZljD4KFE?;{n0`U!2Jasf+vKqz8+7&D^v32v=DtMvrW#V?#ST?`8G^)Wd#sIK(| z>pk?j*o?yYs!hQyyi2|z#vekdo+ouxV>|q04FT519l|#PL+Lo^1RmBWR2(%f9UFAgEuH;?jcm>gDWFh4#qU8Gy( z2f={Y6_s|N3{B7nv%QAZ&vMy*oEAPnM97-u&ocx;pTz3AjORg8D$0F}Ox7ivDWcCq zi@j)d*mB5#$BplJ2F)?k*sp4LrU)B&2-4!B&%kelvHc0KM1?cNcOaLDXmtu)6fpers6r zQC)BPh7U>^CgFLG;CAOLdg3e7|86q_{<+XJlwr;vr$(TPa)7P?GpdNDtVU2|nOVdv z$sxSgFc8QFIr9RRaf;CCJ~RfKRv(h3Le*W|YYWJ+=w@O@a<&k=*lcT_Npysn_$lFx zVFh98?*{TWD?iZ#^dvf)>zP089sy14r4# zVBs4`&LnE0AEyqdJO_PPE@c1=Gbq@xpX%Mj6&YX-lNslx*cQNFb1Ba+{0OJGn0%(b zVNEeeDQc;Uu6rw-Ug?}n8a31hQmK91&W~L}=F1V>S{jIjHRZbsXgbDj67RuOZ`249 zF$c4=xwh~wx?_l`6PXW+{Hl$=HCPu_)zIuMz;VsF<2l06=bo4LVPKH0Y*5&=|8RlZ zK1j_$V-W;EJ@pMF({dPt+{iybW^e?*-%4v9;$LEsIYQA4jETvj>2BWIjUgJqa;h#i zQcvQY<%WiYarht=f?$9k)QG5VufiSn?x>`5vJ2qKmmiUkRjyz)nlGE^oTd-uN*Vaj zQnhGRN)O90H~|>1)rUV~k;Hd$x|LYFKpkz;julXI=tG#cb}?$jev$(m=Limf);xcT z62v!kO6Lz6?j#zP-LJOL9gB}UWkjoTr)9J?4=0zS2VC|hGtkbFF=>~KIx&W|B5%PE zNoLByCUEgHP!SJ(S(L{#3ul`-7O%u;_v(P5rYj;!7476xf zMd2YWeXcea>-)?0KPTm?N~-PG_^V|Xgw?d)=d2n8L(p$VtPZ0?N}a(j1QI4C?PAEh zl?y4zY~jGjuqPaaG^sNJC8d}w*(_991P$se4I_x%EGiD)%d)&iRAU9EmgMf@f4h9A zUaO#$L z2@UchWb|y=(-DCT-5HEf+mKMKgwJ0Xn470wit54zfY8iIDfKuw z7Vw@TE3OX~j4u@D*Me@ELBVVM<{IY5Vh2m^HZrH#K& zcBR*y-a?zbtpmI)6%>$xNvXbr!UWD3iM5FBi~k0S*c6OW zr+evrP=Etghc^#Fv@_2I+U`dooLRw5@Z}8z3;r z2*H`yvsw=E+?ddnwt<%KTtg`nU7OGu>GVl%z%10X=gQi|%g7o%*bz+KYQOX*NcH>e zwYevUpQIxhxS8mdLKRYB|1Fd%&C&qO+jQ9^m`jignAYz$u*IKcgOt1NC_jC?KeGzL z{|9Kuy2260K}NQEIP)u`qfUyF_-c2JW4iyc76f+JT(}eyHstAmzW*H%4hH42@1I!0 zj|rO|8{mubLL8Z#Bqwssj}0gp3nFPx5Np7!%)EB@Gt7sK^Fl|O;q-yDY$GNjnO?PJ z`A4$z6+17C1r`Ep>0=cuAg#aXOD2%lDCqMN+a=hSS9pJa#f)>)tA*Qol=wB%QyJV@>sc!F73 zpee_`YO|$1u%PiAbYIH#)h$|o##}pY^*(IJ^g9n2FEr(~J8SNcFkxK9RT9NzFnG=P zS!Q5o6C7lZcGE2Pp_1mdVOZGki`zrOoNjEvMTG>jSfwBX99c~x0?#a{t);olnv5GY z?sI;6S8xkDK?fItugtd}xR&1%+@CC?B#gE7ODU;>KjXE>9!vqVP?3!k8rZ^1ekVe( zOLNPdu>b%R)NLr;udKi(4-X7?1YS`h6!%;cn+reGKoR8g*owb&!1>|#Fi5tdk5ke^ zyNT}*^tnR$H19EcOoDi+Suo^3`5=g@odtco^4QnRbJkw=(JMK`(f95Gg1P-UE8Rg1o< zCWQ`QVmP#2Rg-nADoP8L4w0U?=Rx?RbsZ00M_|W4_TUNvppee@u}qyx#5MV4znE8@ zdJ6;LEKJ%l5qMLu)az|YO0x2{i}z<`R{65EdOK3r5!59Xv;^>vd}4K0tVR$Za+FU6 z@T8ycMO^YvC>@MN0K}GpJ09m@#0S7gZc<=Vs`1sLQO4spmyqjLI2PSqJB) zIZTD5s_>>0503n^egSd+TmuRRD*EFqw(E*O-MC=-)f)@VV_Czs*UY=<_RUif9?`Q88Ltzph!E zYqH%W3|2WQ^^0j}7Db$hJ#hI^irBg{&tc_mv&#R62k)h=8%`67w8|HM+}|DITY75j HAM}3%H4L`n literal 0 HcmV?d00001 diff --git a/test/audio/MidiFileGenerator.test.ts b/test/audio/MidiFileGenerator.test.ts index 75326de5b..e4180a6b3 100644 --- a/test/audio/MidiFileGenerator.test.ts +++ b/test/audio/MidiFileGenerator.test.ts @@ -221,23 +221,23 @@ describe('MidiFileGeneratorTest', () => { // on beat new BendEvent(ticks[0], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[0], 0, info.primaryChannel, 3840, 67, DynamicValue.F), + new NoteEvent(ticks[0], 0, info.primaryChannel, 3840, 67, DynamicValue.MF), new BendEvent(ticks[1], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[1], 0, info.primaryChannel, 120, 67, DynamicValue.F), + new NoteEvent(ticks[1], 0, info.primaryChannel, 120, 67, DynamicValue.MF), new BendEvent(ticks[2], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[2], 0, info.primaryChannel, 3720, 67, DynamicValue.F), + new NoteEvent(ticks[2], 0, info.primaryChannel, 3720, 67, DynamicValue.MF), // before beat new BendEvent(ticks[3], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[3], 0, info.primaryChannel, 3720, 67, DynamicValue.F), + new NoteEvent(ticks[3], 0, info.primaryChannel, 3720, 67, DynamicValue.MF), new BendEvent(ticks[4], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[4], 0, info.primaryChannel, 120, 67, DynamicValue.F), + new NoteEvent(ticks[4], 0, info.primaryChannel, 120, 67, DynamicValue.MF), new BendEvent(ticks[5], 0, info.primaryChannel, 8192), - new NoteEvent(ticks[5], 0, info.primaryChannel, 3840, 67, DynamicValue.F), + new NoteEvent(ticks[5], 0, info.primaryChannel, 3840, 67, DynamicValue.MF), // bend beat new BendEvent(ticks[6], 0, info.secondaryChannel, 8192), @@ -253,7 +253,7 @@ describe('MidiFileGeneratorTest', () => { new NoteBendEvent(ticks[6] + 12 * 9, 0, info.secondaryChannel, 67, 8960), new NoteBendEvent(ticks[6] + 12 * 10, 0, info.secondaryChannel, 67, 9045), new NoteBendEvent(ticks[6] + 12 * 11, 0, info.secondaryChannel, 67, 9131), - new NoteEvent(ticks[6], 0, info.secondaryChannel, 3840, 67, DynamicValue.F), + new NoteEvent(ticks[6], 0, info.secondaryChannel, 3840, 67, DynamicValue.MF), // end of track new TrackEndEvent(19200, 0) // 3840 = end of bar diff --git a/test/exporter/Gp7Exporter.test.ts b/test/exporter/Gp7Exporter.test.ts index 8c515c58a..62faf72c2 100644 --- a/test/exporter/Gp7Exporter.test.ts +++ b/test/exporter/Gp7Exporter.test.ts @@ -7,6 +7,7 @@ import { Gp7Exporter } from '@src/exporter/Gp7Exporter'; import { JsonConverter } from '@src/model/JsonConverter'; import { ScoreLoader } from '@src/importer/ScoreLoader'; import { ComparisonHelpers } from '@test/model/ComparisonHelpers'; +import { AlphaTexImporter } from '@src/importer/AlphaTexImporter'; describe('Gp7ExporterTest', () => { const loadScore: (name: string) => Promise = async (name: string): Promise => { @@ -29,7 +30,7 @@ describe('Gp7ExporterTest', () => { return new Gp7Exporter().export(score, null); }; - const testRoundTripEqual: (name: string) => Promise = async (name: string): Promise => { + const testRoundTripEqual: (name: string, ignoreKeys: string[] | null) => Promise = async (name: string, ignoreKeys: string[] | null = null): Promise => { try { const expected = await loadScore(name); if (!expected) { @@ -46,7 +47,7 @@ describe('Gp7ExporterTest', () => { const expectedJson = JsonConverter.scoreToJsObject(expected); const actualJson = JsonConverter.scoreToJsObject(actual) - ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + fileName + '>'); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + fileName + '>', ignoreKeys); } catch (e) { fail(e); } @@ -55,7 +56,7 @@ describe('Gp7ExporterTest', () => { const testRoundTripFolderEqual: (name: string) => Promise = async (name: string): Promise => { const files: string[] = await TestPlatform.listDirectory(`test-data/${name}`); for (const file of files) { - await testRoundTripEqual(`${name}/${file}`); + await testRoundTripEqual(`${name}/${file}`, null); } }; @@ -96,4 +97,48 @@ describe('Gp7ExporterTest', () => { it('visual-special-tracks', async () => { await testRoundTripFolderEqual('visual-tests/special-tracks'); }); + + it('gp5-to-gp7', async () => { + await testRoundTripEqual(`conversion/full-song.gp5`, [ + 'accidentalMode', // gets upgraded from default + 'percussionArticulations', // gets added + 'automations' // volume automations are not yet supported in gpif + ]); + }); + + it('gp6-to-gp7', async () => { + await testRoundTripEqual(`conversion/full-song.gpx`, [ + 'accidentalMode', // gets upgraded from default + 'percussionArticulations', // gets added + 'percussionArticulation', // gets added + ]); + }); + + it('alphatex-to-gp7', async () => { + const tex = `\\title "Canon Rock" + \\subtitle "JerryC" + \\tempo 90 + . + :2 19.2{v f} 17.2{v f} | + 15.2{v f} 14.2{v f}| + 12.2{v f} 10.2{v f}| + 12.2{v f} 14.2{v f}.4 :8 15.2 17.2 | + 14.1.2 :8 17.2 15.1 14.1{h} 17.2 | + 15.2{v d}.4 :16 17.2{h} 15.2 :8 14.2 14.1 17.1{b(0 4 4 0)}.4 | + 15.1.8 :16 14.1{tu 3} 15.1{tu 3} 14.1{tu 3} :8 17.2 15.1 14.1 :16 12.1{tu 3} 14.1{tu 3} 12.1{tu 3} :8 15.2 14.2 | + 12.2 14.3 12.3 15.2 :32 14.2{h} 15.2{h} 14.2{h} 15.2{h}14.2{h} 15.2{h}14.2{h} 15.2{h}14.2{h} 15.2{h}14.2{h} 15.2{h}14.2{h} 15.2{h}14.2{h} 15.2{h} + `; + + const importer = new AlphaTexImporter(); + importer.init(TestPlatform.createStringReader(tex), new Settings()); + const expected = importer.readScore(); + const exported = exportGp7(expected); + + const actual = prepareGp7ImporterWithBytes(exported).readScore(); + + const expectedJson = JsonConverter.scoreToJsObject(expected); + const actualJson = JsonConverter.scoreToJsObject(actual) + + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '', ['accidentalMode']); + }); }); diff --git a/test/model/ComparisonHelpers.ts b/test/model/ComparisonHelpers.ts index 22287f19f..25ab43ac4 100644 --- a/test/model/ComparisonHelpers.ts +++ b/test/model/ComparisonHelpers.ts @@ -1,6 +1,6 @@ export class ComparisonHelpers { - public static expectJsonEqual(expected: unknown, actual: unknown, path: string) { + public static expectJsonEqual(expected: unknown, actual: unknown, path: string, ignoreKeys: string[] | null) { const expectedType = typeof expected; const actualType = typeof actual; @@ -33,7 +33,7 @@ export class ComparisonHelpers { fail(`Array Length mismatch on hierarchy: ${path}, ${actual.length} != ${expected.length}`); } else { for (let i = 0; i < actual.length; i++) { - ComparisonHelpers.expectJsonEqual(expected[i], actual[i], `${path}[${i}]`); + ComparisonHelpers.expectJsonEqual(expected[i], actual[i], `${path}[${i}]`, ignoreKeys); } } } else if (expected instanceof Map) { @@ -63,7 +63,9 @@ export class ComparisonHelpers { case 'tieDestinationNoteId': break; default: - ComparisonHelpers.expectJsonEqual(expectedMap.get(key), actualMap.get(key), `${path}.${key}`); + if(!ignoreKeys || ignoreKeys.indexOf(key) === -1) { + ComparisonHelpers.expectJsonEqual(expectedMap.get(key), actualMap.get(key), `${path}.${key}`, ignoreKeys); + } break; } } diff --git a/test/model/JsonConverter.test.ts b/test/model/JsonConverter.test.ts index 9d7bbcab3..fd856b02a 100644 --- a/test/model/JsonConverter.test.ts +++ b/test/model/JsonConverter.test.ts @@ -31,7 +31,7 @@ describe('JsonConverterTest', () => { const actual = JsonConverter.jsObjectToScore(expectedJson); const actualJson = JsonConverter.scoreToJsObject(actual); - ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>'); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '<' + name.substr(name.lastIndexOf('/') + 1) + '>', null); } catch (e) { fail(e); } @@ -135,7 +135,7 @@ describe('JsonConverterTest', () => { const actual = JsonConverter.jsObjectToSettings(expectedJson); const actualJson = JsonConverter.settingsToJsObject(actual); - ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, ''); + ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '', null); }); it('settings-from-map', () => { From 0c6a74a5e7037dee107dfe5dafd0bdb1d0de6cf1 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 15:51:58 +0100 Subject: [PATCH 24/31] Restored old dynamics on grace test file --- .../visual-tests/special-notes/ghost-notes.gp | Bin 8959 -> 8934 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test-data/visual-tests/special-notes/ghost-notes.gp b/test-data/visual-tests/special-notes/ghost-notes.gp index 0d8084932b7ef1f7a822dc2d5d021756a183e659..84cbc3ea9343cc5052cff47d7fd27bac80acd019 100644 GIT binary patch delta 7392 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 SB0d4rliwm51_>bm0000~#x{!p delta 7431 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 Date: Wed, 30 Dec 2020 16:26:49 +0100 Subject: [PATCH 25/31] Slight performance improvements --- src/exporter/GpifWriter.ts | 2 +- src/zip/ZipWriter.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/exporter/GpifWriter.ts b/src/exporter/GpifWriter.ts index 60a20fdec..83bc3eb91 100644 --- a/src/exporter/GpifWriter.ts +++ b/src/exporter/GpifWriter.ts @@ -231,7 +231,7 @@ export class GpifWriter { this.writeDom(xmlDocument, score); - return xmlDocument.toString(' ', true); + return xmlDocument.toString('', true); } private writeDom(parent: XmlNode, score: Score) { diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index beccbc7e0..fb3651d0a 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -78,7 +78,13 @@ export class ZipWriter { // TypeScript definition, for reference. // export default function crc32( data: Buffer | Uint8Array | number[] ) { private static crc32(input: Uint8Array) { - return ~input.reduce((crc, b) => ZipWriter.Crc32Lookup[(crc ^ b) & 0xff] ^ (crc >>> 8), 0xffffffff); + let crc = 0xffffffff; + + for(let i = 0, j = input.length; i < j; i++) { + crc = ZipWriter.Crc32Lookup[(crc ^ input[i]) & 0xff] ^ (crc >>> 8); + } + + return ~crc; } public end() { From 75f2b424b65cf323ea25f8d42c5b2b846948e009 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 20:48:06 +0100 Subject: [PATCH 26/31] Added deflate algorithm --- src/exporter/Gp7Exporter.ts | 2 +- src/zip/Adler32.ts | 85 ++++ src/zip/Crc32.ts | 59 +++ src/zip/Deflate.ts | 4 - src/zip/DeflateStrategy.ts | 42 ++ src/zip/Deflater.ts | 308 +++++++++++++++ src/zip/DeflaterConstants.ts | 86 +++++ src/zip/DeflaterEngine.ts | 681 ++++++++++++++++++++++++++++++++ src/zip/DeflaterHuffman.ts | 731 +++++++++++++++++++++++++++++++++++ src/zip/DeflaterPending.ts | 36 ++ src/zip/PendingBuffer.ts | 149 +++++++ src/zip/ZipWriter.ts | 88 +++-- 12 files changed, 2236 insertions(+), 35 deletions(-) create mode 100644 src/zip/Adler32.ts create mode 100644 src/zip/Crc32.ts delete mode 100644 src/zip/Deflate.ts create mode 100644 src/zip/DeflateStrategy.ts create mode 100644 src/zip/Deflater.ts create mode 100644 src/zip/DeflaterConstants.ts create mode 100644 src/zip/DeflaterEngine.ts create mode 100644 src/zip/DeflaterHuffman.ts create mode 100644 src/zip/DeflaterPending.ts create mode 100644 src/zip/PendingBuffer.ts diff --git a/src/exporter/Gp7Exporter.ts b/src/exporter/Gp7Exporter.ts index a9625998a..722ce04b2 100644 --- a/src/exporter/Gp7Exporter.ts +++ b/src/exporter/Gp7Exporter.ts @@ -30,9 +30,9 @@ export class Gp7Exporter extends ScoreExporter { let fileSystem: ZipWriter = new ZipWriter(this.data); fileSystem.writeEntry(new ZipEntry('VERSION', IOHelper.stringToBytes('7.0'))); fileSystem.writeEntry(new ZipEntry('Content/', new Uint8Array(0))); - fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.writeEntry(new ZipEntry('Content/BinaryStylesheet', binaryStylesheet)); fileSystem.writeEntry(new ZipEntry('Content/PartConfiguration', partConfiguration)); + fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); fileSystem.end(); } } diff --git a/src/zip/Adler32.ts b/src/zip/Adler32.ts new file mode 100644 index 000000000..8b3527d27 --- /dev/null +++ b/src/zip/Adler32.ts @@ -0,0 +1,85 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +/** + * Computes Adler32 checksum for a stream of data. An Adler32 + * checksum is not as reliable as a CRC32 checksum, but a lot faster to + * compute. + * + * The specification for Adler32 may be found in RFC 1950. + * ZLIB Compressed Data Format Specification version 3.3) + */ +export class Adler32 { + + /** + * largest prime smaller than 65536 + */ + private static readonly BASE: number = 65521; + + + /** + * Returns the Adler32 data checksum computed so far. + */ + public value: number = 1; + + /** + * Initialise a default instance of Adler32 + */ + public constructor() { + this.reset(); + } + + /** + * Resets the Adler32 data checksum as if no update was ever called. + */ + public reset() { + this.value = 1; + } + + /** + * Update Adler32 data checksum based on a portion of a block of data + * @param data The array containing the data to add + * @param offset Range start for data (inclusive) + * @param count The number of bytes to checksum starting from offset + */ + public update(data: Uint8Array, offset: number, count: number) { + //(By Per Bothner) + let s1 = this.value & 0xFFFF; + let s2 = this.value >> 16; + while (count > 0) { + // We can defer the modulo operation: + // s1 maximally grows from 65521 to 65521 + 255 * 3800 + // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 + let n = 3800; + if (n > count) { + n = count; + } + count -= n; + while (--n >= 0) { + s1 = s1 + (data[offset++] & 0xff); + s2 = s2 + s1; + } + s1 %= Adler32.BASE; + s2 %= Adler32.BASE; + } + this.value = (s2 << 16) | s1; + } +} \ No newline at end of file diff --git a/src/zip/Crc32.ts b/src/zip/Crc32.ts new file mode 100644 index 000000000..ae8164040 --- /dev/null +++ b/src/zip/Crc32.ts @@ -0,0 +1,59 @@ +/** + * CRC-32 with reversed data and unreversed output + */ +export class Crc32 { + private static readonly Crc32Lookup: Uint32Array = Crc32.buildCrc32Lookup(); + private static buildCrc32Lookup(): Uint32Array { + const poly = 0xedb88320; + const lookup = new Uint32Array(256); + for(let i = 0; i < lookup.length; i++) { + let crc = i; + for (let bit = 0; bit < 8; bit++) { + crc = (crc & 1) === 1 ? (crc >>> 1) ^ poly : crc >>> 1; + } + lookup[i] = crc; + } + + return lookup; + } + + private static readonly CrcInit: number = 0xFFFFFFFF; + + /** + * The CRC data checksum so far. + */ + private _checkValue: number = Crc32.CrcInit; + + /** + * Returns the CRC data checksum computed so far. + */ + public get value() { + return ~this._checkValue; + } + + /** + * Initialise a default instance of Crc32. + */ + public constructor() { + this.reset(); + } + + /** + * Update CRC data checksum based on a portion of a block of data + * @param data The array containing the data to add + * @param offset Range start for data (inclusive) + * @param count The number of bytes to checksum starting from offset + */ + public update(data: Uint8Array, offset: number, count: number) { + for(let i = 0; i < count; i++) { + this._checkValue = Crc32.Crc32Lookup[(this._checkValue ^ data[offset + i]) & 0xff] ^ (this._checkValue >>> 8); + } + } + + /** + * Resets the CRC data checksum as if no update was ever called. + */ + public reset() { + this._checkValue = Crc32.CrcInit; + } +} \ No newline at end of file diff --git a/src/zip/Deflate.ts b/src/zip/Deflate.ts deleted file mode 100644 index defab8969..000000000 --- a/src/zip/Deflate.ts +++ /dev/null @@ -1,4 +0,0 @@ -export class Deflate { - public crc32: number = 0; - public compressedSize: number = 0; -} diff --git a/src/zip/DeflateStrategy.ts b/src/zip/DeflateStrategy.ts new file mode 100644 index 000000000..7d325ce3b --- /dev/null +++ b/src/zip/DeflateStrategy.ts @@ -0,0 +1,42 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/** + * Strategies for deflater + */ +export enum DeflateStrategy { + /** + * The default strategy + */ + Default = 0, + + /** + * This strategy will only allow longer string repetitions. It is + * useful for random data with a small character set. + */ + Filtered = 1, + + /** + * This strategy will not look for string repetitions at all. It + * only encodes with Huffman trees (which means, that more common + * characters get a smaller encoding. + */ + HuffmanOnly = 2 +} \ No newline at end of file diff --git a/src/zip/Deflater.ts b/src/zip/Deflater.ts new file mode 100644 index 000000000..998f64938 --- /dev/null +++ b/src/zip/Deflater.ts @@ -0,0 +1,308 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { DeflaterConstants } from "./DeflaterConstants"; +import { DeflaterEngine } from "./DeflaterEngine"; +import { DeflaterPending } from "./DeflaterPending"; +import { DeflateStrategy } from "./DeflateStrategy"; + +/** + * This is the Deflater class. The deflater class compresses input + * with the deflate algorithm described in RFC 1951. It has several + * compression levels and three different strategies described below. + * + * This class is not thread safe. This is inherent in the API, due + * to the split of deflate and setInput. + * + * author of the original java version : Jochen Hoenicke + */ +export class Deflater { + /* + * The Deflater can do the following state transitions: + * + * (1) -> INIT_STATE ----> INIT_FINISHING_STATE ---. + * / | (2) (5) | + * / v (5) | + * (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3) + * \ | (3) | ,--------' + * | | | (3) / + * v v (5) v v + * (1) -> BUSY_STATE ----> FINISHING_STATE + * | (6) + * v + * FINISHED_STATE + * \_____________________________________/ + * | (7) + * v + * CLOSED_STATE + * + * (1) If we should produce a header we start in INIT_STATE, otherwise + * we start in BUSY_STATE. + * (2) A dictionary may be set only when we are in INIT_STATE, then + * we change the state as indicated. + * (3) Whether a dictionary is set or not, on the first call of deflate + * we change to BUSY_STATE. + * (4) -- intentionally left blank -- :) + * (5) FINISHING_STATE is entered, when flush() is called to indicate that + * there is no more INPUT. There are also states indicating, that + * the header wasn't written yet. + * (6) FINISHED_STATE is entered, when everything has been flushed to the + * internal pending output buffer. + * (7) At any time (7) + * + */ + + public static readonly DEFAULT_COMPRESSION: number = -1; + + /** + * This level won't compress at all but output uncompressed blocks. + */ + public static readonly NO_COMPRESSION: number = 0; + + /** + * The best and slowest compression level. This tries to find very + * long and distant string repetitions. + */ + public static readonly BEST_COMPRESSION: number = 9; + + /** + * The compression method. This is the only method supported so far. + * There is no need to use this constant at all. + */ + public static readonly DEFLATED: number = 8; + + + private static readonly IS_SETDICT: number = 0x01; + private static readonly IS_FLUSHING: number = 0x04; + private static readonly IS_FINISHING: number = 0x08; + + private static readonly INIT_STATE: number = 0x00; + private static readonly BUSY_STATE: number = 0x10; + + private static readonly FLUSHING_STATE: number = 0x14; + private static readonly FINISHING_STATE: number = 0x1c; + private static readonly FINISHED_STATE: number = 0x1e; + + + /** + * If true no Zlib/RFC1950 headers or footers are generated + */ + private _noZlibHeaderOrFooter: boolean = false; + + private _state: number = 0; + // private _totalOut: number = 0; + private _level: number = 0; + private _pending: DeflaterPending; + private _engine: DeflaterEngine; + + public get inputCrc(): number { + return this._engine.inputCrc.value; + } + + /** + * Creates a new deflater with given compression level + * @param level the compression level, a value between NO_COMPRESSION and BEST_COMPRESSION. + * @param noZlibHeaderOrFooter true, if we should suppress the Zlib/RFC1950 header at the + * beginning and the adler checksum at the end of the output. This is + * useful for the GZIP/PKZIP formats. + */ + public constructor(level: number, noZlibHeaderOrFooter: boolean) { + this._pending = new DeflaterPending(); + this._engine = new DeflaterEngine(this._pending, noZlibHeaderOrFooter); + this._noZlibHeaderOrFooter = noZlibHeaderOrFooter; + this.setStrategy(DeflateStrategy.Default); + this.setLevel(level); + this.reset(); + } + + /** + * Sets the compression strategy. Strategy is one of + * DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact + * position where the strategy is changed, the same as for + * SetLevel() applies. + * @param strategy The new compression strategy. + */ + public setStrategy(strategy: DeflateStrategy) { + this._engine.strategy = strategy; + } + + /** + * Sets the compression level. There is no guarantee of the exact + * position of the change, but if you call this when needsInput is + * true the change of compression level will occur somewhere near + * before the end of the so far given input. + * @param level the new compression level. + */ + public setLevel(level: number) { + if (level == Deflater.DEFAULT_COMPRESSION) { + level = 6; + } + else if (level < Deflater.NO_COMPRESSION || level > Deflater.BEST_COMPRESSION) { + throw new Error("level out of range"); + } + + if (this._level != level) { + this._level = level; + this._engine.setLevel(level); + } + } + + /** + * Returns true, if the input buffer is empty. + * You should then call setInput(). + * NOTE: This method can also return true when the stream + * was finished. + */ + public get isNeedingInput() { + return this._engine.needsInput(); + } + + /** + * Returns true if the stream was finished and no more output bytes + * are available. + */ + public get isFinished() { + return (this._state == Deflater.FINISHED_STATE) && this._pending.isFlushed; + } + + /** + * Resets the deflater. The deflater acts afterwards as if it was + * just created with the same compression level and strategy as it + * had before. + */ + public reset() { + this._state = (this._noZlibHeaderOrFooter ? Deflater.BUSY_STATE : Deflater.INIT_STATE); + // this._totalOut = 0; + this._pending.reset(); + this._engine.reset(); + } + + /** + * Sets the data which should be compressed next. This should be + * only called when needsInput indicates that more input is needed. + * The given byte array should not be changed, before needsInput() returns + * true again. + * @param input the buffer containing the input data. + * @param offset the start of the data. + * @param count the number of data bytes of input. + */ + public setInput(input: Uint8Array, offset: number, count: number) { + this._engine.setInput(input, offset, count); + } + + /** + * Deflates the current input block to the given array. + * @param output Buffer to store the compressed data. + * @param offset Offset into the output array. + * @param length The maximum number of bytes that may be stored. + * @returns The number of compressed bytes added to the output, or 0 if either + * needsInput() or finished() returns true or length is zero. + */ + public deflate(output: Uint8Array, offset: number, length: number): number { + let origLength = length; + + if (this._state < Deflater.BUSY_STATE) { + // output header + let header = (Deflater.DEFLATED + + ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8; + let level_flags = (this._level - 1) >> 1; + if (level_flags < 0 || level_flags > 3) { + level_flags = 3; + } + header |= level_flags << 6; + if ((this._state & Deflater.IS_SETDICT) != 0) { + // Dictionary was set + header |= DeflaterConstants.PRESET_DICT; + } + header += 31 - (header % 31); + + this._pending.writeShortMSB(header); + if ((this._state & Deflater.IS_SETDICT) != 0) { + let chksum = this._engine.adler?.value ?? 0; + this._engine.resetAdler(); + this._pending.writeShortMSB(chksum >> 16); + this._pending.writeShortMSB(chksum & 0xffff); + } + + this._state = Deflater.BUSY_STATE | (this._state & (Deflater.IS_FLUSHING | Deflater.IS_FINISHING)); + } + + for (; ;) { + let count = this._pending.flush(output, offset, length); + offset += count; + // this._totalOut += count; + length -= count; + + if (length == 0 || this._state == Deflater.FINISHED_STATE) { + break; + } + + if (!this._engine.deflate((this._state & Deflater.IS_FLUSHING) != 0, (this._state & Deflater.IS_FINISHING) != 0)) { + switch (this._state) { + case Deflater.BUSY_STATE: + // We need more input now + return origLength - length; + + case Deflater.FLUSHING_STATE: + if (this._level != Deflater.NO_COMPRESSION) { + /* We have to supply some lookahead. 8 bit lookahead + * is needed by the zlib inflater, and we must fill + * the next byte, so that all bits are flushed. + */ + let neededbits = 8 + ((-this._pending.bitCount) & 7); + while (neededbits > 0) { + /* write a static tree block consisting solely of + * an EOF: + */ + this._pending.writeBits(2, 10); + neededbits -= 10; + } + } + this._state = Deflater.BUSY_STATE; + break; + + case Deflater.FINISHING_STATE: + this._pending.alignToByte(); + + // Compressed data is complete. Write footer information if required. + if (!this._noZlibHeaderOrFooter) { + let adler = this._engine.adler?.value ?? 0; + this._pending.writeShortMSB(adler >> 16); + this._pending.writeShortMSB(adler & 0xffff); + } + this._state = Deflater.FINISHED_STATE; + break; + } + } + } + return origLength - length; + + } + + /** + * Finishes the deflater with the current input block. It is an error + * to give more input after this method was called. This method must + * be called to force all bytes to be flushed. + */ + public finish() { + this._state |= (Deflater.IS_FLUSHING | Deflater.IS_FINISHING); + } +} diff --git a/src/zip/DeflaterConstants.ts b/src/zip/DeflaterConstants.ts new file mode 100644 index 000000000..9cc00a7cc --- /dev/null +++ b/src/zip/DeflaterConstants.ts @@ -0,0 +1,86 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/** + * This class contains constants used for deflation. + */ +export class DeflaterConstants { + public static readonly MAX_WBITS: number = 15; + + public static readonly WSIZE: number = 1 << DeflaterConstants.MAX_WBITS; + public static readonly WMASK: number = DeflaterConstants.WSIZE - 1; + + public static readonly MIN_MATCH: number = 3; + public static readonly MAX_MATCH: number = 258; + + /** + * Written to Zip file to identify a stored block + */ + public static readonly STORED_BLOCK = 0; + + /** + * Identifies static tree in Zip file + */ + public static readonly STATIC_TREES = 1; + + /** + * Identifies dynamic tree in Zip file + */ + public static readonly DYN_TREES = 2; + + + + /** + * Header flag indicating a preset dictionary for deflation + */ + public static readonly PRESET_DICT: number = 0x20; + + /** + * Sets internal buffer sizes for Huffman encoding + */ + public static readonly DEFAULT_MEM_LEVEL: number = 8; + + public static readonly PENDING_BUF_SIZE: number = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 8); + + public static readonly MAX_BLOCK_SIZE: number = Math.min(65535, DeflaterConstants.PENDING_BUF_SIZE - 5); + + + public static readonly HASH_BITS: number = DeflaterConstants.DEFAULT_MEM_LEVEL + 7; + + public static readonly HASH_SIZE: number = 1 << DeflaterConstants.HASH_BITS; + public static readonly HASH_SHIFT: number = (DeflaterConstants.HASH_BITS + DeflaterConstants.MIN_MATCH - 1) / DeflaterConstants.MIN_MATCH; + + public static readonly HASH_MASK: number = DeflaterConstants.HASH_SIZE - 1; + + public static readonly MIN_LOOKAHEAD: number = DeflaterConstants.MAX_MATCH + DeflaterConstants.MIN_MATCH + 1; + public static readonly MAX_DIST: number = DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD; + + + public static readonly GOOD_LENGTH: number[] = [0, 4, 4, 4, 4, 8, 8, 8, 32, 32]; + + public static readonly MAX_LAZY: number[] = [0, 4, 5, 6, 4, 16, 16, 32, 128, 258]; + public static readonly NICE_LENGTH: number[] = [0, 8, 16, 32, 16, 32, 128, 128, 258, 258]; + public static readonly MAX_CHAIN: number[] = [0, 4, 8, 32, 16, 32, 128, 256, 1024, 4096]; + public static readonly COMPR_FUNC: number[] = [0, 1, 1, 1, 1, 2, 2, 2, 2, 2]; + + public static readonly DEFLATE_STORED: number = 0; + public static readonly DEFLATE_FAST: number = 1; + public static readonly DEFLATE_SLOW: number = 2; +} \ No newline at end of file diff --git a/src/zip/DeflaterEngine.ts b/src/zip/DeflaterEngine.ts new file mode 100644 index 000000000..ff4e6e72c --- /dev/null +++ b/src/zip/DeflaterEngine.ts @@ -0,0 +1,681 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { Adler32 } from "./Adler32"; +import { Crc32 } from "./Crc32"; +import { DeflaterConstants } from "./DeflaterConstants"; +import { DeflaterHuffman } from "./DeflaterHuffman"; +import { DeflaterPending } from "./DeflaterPending"; +import { DeflateStrategy } from "./DeflateStrategy"; + +/** + * Low level compression engine for deflate algorithm which uses a 32K sliding window + * with secondary compression from Huffman/Shannon-Fano codes. + */ +export class DeflaterEngine { + private static readonly TooFar: number = 4096; + + private blockStart: number; + private max_chain: number = 0; + private max_lazy: number = 0; + private niceLength: number = 0; + private goodLength: number = 0; + + /** + * Hash index of string to be inserted + */ + private ins_h: number = 0; + + /** + * The current compression function. + */ + private compressionFunction: number = 0; + + /** + * Points to the current character in the window. + */ + private strstart: number; + + /** + * This array contains the part of the uncompressed stream that + * is of relevance. The current character is indexed by strstart. + */ + private window: Uint8Array; + + /** + * Hashtable, hashing three characters to an index for window, so + * that window[index]..window[index+2] have this hash code. + * Note that the array should really be unsigned short, so you need + * to and the values with 0xffff. + */ + private head: Int16Array; + + /** + * prev[index & WMASK] points to the previous index that has the + * same hash code as the string starting at index. This way + * entries with the same hash code are in a linked list. + * Note that the array should really be unsigned short, so you need + * to and the values with 0xffff. + */ + private prev: Int16Array; + + /** + * lookahead is the number of characters starting at strstart in + * window that are valid. + * So window[strstart] until window[strstart+lookahead-1] are valid + * characters. + */ + private lookahead: number = 0; + + /** + * The input data for compression. + */ + private inputBuf: Uint8Array | null = null; + + // /** + // * The total bytes of input read. + // */ + // private totalIn: number = 0; + + /** + * The offset into inputBuf, where input data starts. + */ + private inputOff: number = 0; + + /** + * The end offset of the input data. + */ + private inputEnd: number = 0; + + + /** + * Set if previous match exists + */ + private prevAvailable: boolean = false; + + private matchStart: number = 0; + + /** + * Length of best match + */ + private matchLen: number = 0; + + private pending: DeflaterPending; + private huffman: DeflaterHuffman; + + public inputCrc: Crc32; + /** + * The adler checksum + */ + public adler: Adler32 | null; + + /** + * Get/set the deflate strategy + */ + public strategy: DeflateStrategy = DeflateStrategy.Default; + + /** + * Construct instance with pending buffer + * @param pending Pending buffer to use + * @param noAdlerCalculation Pending buffer to use + */ + public constructor(pending: DeflaterPending, noAdlerCalculation: boolean) { + this.pending = pending; + this.huffman = new DeflaterHuffman(pending); + this.inputCrc = new Crc32(); + if (!noAdlerCalculation) { + this.adler = new Adler32(); + } else { + this.adler = null; + } + + this.window = new Uint8Array(2 * DeflaterConstants.WSIZE); + this.head = new Int16Array(DeflaterConstants.HASH_SIZE); + this.prev = new Int16Array(DeflaterConstants.WSIZE); + + // We start at index 1, to avoid an implementation deficiency, that + // we cannot build a repeat pattern at index 0. + this.blockStart = 1; + this.strstart = 1; + } + + /** + * Reset Adler checksum + */ + public resetAdler() { + this.adler?.reset(); + } + + /** + * Reset internal state + */ + public reset() { + this.huffman.reset(); + this.adler?.reset(); + this.inputCrc.reset(); + this.blockStart = 1; + this.strstart = 1; + this.lookahead = 0; + // this.totalIn = 0; + this.prevAvailable = false; + this.matchLen = DeflaterConstants.MIN_MATCH - 1; + + for (let i = 0; i < DeflaterConstants.HASH_SIZE; i++) { + this.head[i] = 0; + } + + for (let i = 0; i < DeflaterConstants.WSIZE; i++) { + this.prev[i] = 0; + } + } + + /** + * Set the deflate level (0-9) + * @param level The value to set the level to. + */ + public setLevel(level: number) { + this.goodLength = DeflaterConstants.GOOD_LENGTH[level]; + this.max_lazy = DeflaterConstants.MAX_LAZY[level]; + this.niceLength = DeflaterConstants.NICE_LENGTH[level]; + this.max_chain = DeflaterConstants.MAX_CHAIN[level]; + + if (DeflaterConstants.COMPR_FUNC[level] != this.compressionFunction) { + switch (this.compressionFunction) { + case DeflaterConstants.DEFLATE_STORED: + if (this.strstart > this.blockStart) { + this.huffman.flushStoredBlock(this.window, this.blockStart, + this.strstart - this.blockStart, false); + this.blockStart = this.strstart; + } + this.updateHash(); + break; + + case DeflaterConstants.DEFLATE_FAST: + if (this.strstart > this.blockStart) { + this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, + false); + this.blockStart = this.strstart; + } + break; + + case DeflaterConstants.DEFLATE_SLOW: + if (this.prevAvailable) { + this.huffman.tallyLit(this.window[this.strstart - 1] & 0xff); + } + if (this.strstart > this.blockStart) { + this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, false); + this.blockStart = this.strstart; + } + this.prevAvailable = false; + this.matchLen = DeflaterConstants.MIN_MATCH - 1; + break; + } + this.compressionFunction = DeflaterConstants.COMPR_FUNC[level]; + } + } + + private updateHash() { + this.ins_h = (this.window[this.strstart] << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + 1]; + } + + /** + * Determines if more input is needed. + * @returns Return true if input is needed via setInput + */ + public needsInput(): boolean { + return (this.inputEnd == this.inputOff); + } + + /** + * Sets input data to be deflated. Should only be called when NeedsInput() + * returns true + * @param buffer The buffer containing input data. + * @param offset The offset of the first byte of data. + * @param count The number of bytes of data to use as input. + */ + public setInput(buffer: Uint8Array, offset: number, count: number) { + let end = offset + count; + this.inputBuf = buffer; + this.inputOff = offset; + this.inputEnd = end; + } + + /** + * Deflate drives actual compression of data + * @param flush True to flush input buffers + * @param finish Finish deflation with the current input. + * @returns Returns true if progress has been made. + */ + public deflate(flush: boolean, finish: boolean): boolean { + let progress: boolean; + do { + this.fillWindow(); + let canFlush = flush && (this.inputOff == this.inputEnd); + + switch (this.compressionFunction) { + case DeflaterConstants.DEFLATE_STORED: + progress = this.deflateStored(canFlush, finish); + break; + + case DeflaterConstants.DEFLATE_FAST: + progress = this.deflateFast(canFlush, finish); + break; + + case DeflaterConstants.DEFLATE_SLOW: + progress = this.deflateSlow(canFlush, finish); + break; + + default: + throw new Error("unknown compressionFunction"); + } + } while (this.pending.isFlushed && progress); // repeat while we have no pending output and progress was made + return progress; + } + + private deflateStored(flush: boolean, finish: boolean): boolean { + if (!flush && (this.lookahead == 0)) { + return false; + } + + this.strstart += this.lookahead; + this.lookahead = 0; + + let storedLength = this.strstart - this.blockStart; + + if ((storedLength >= DeflaterConstants.MAX_BLOCK_SIZE) || // Block is full + (this.blockStart < DeflaterConstants.WSIZE && storedLength >= DeflaterConstants.MAX_DIST) || // Block may move out of window + flush) { + let lastBlock = finish; + if (storedLength > DeflaterConstants.MAX_BLOCK_SIZE) { + storedLength = DeflaterConstants.MAX_BLOCK_SIZE; + lastBlock = false; + } + + this.huffman.flushStoredBlock(this.window, this.blockStart, storedLength, lastBlock); + this.blockStart += storedLength; + return !(lastBlock || storedLength == 0); + } + return true; + } + + private deflateFast(flush: boolean, finish: boolean): boolean { + if (this.lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) { + return false; + } + + while (this.lookahead >= DeflaterConstants.MIN_LOOKAHEAD || flush) { + if (this.lookahead == 0) { + // We are flushing everything + this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, finish); + this.blockStart = this.strstart; + return false; + } + + if (this.strstart > 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD) { + /* slide window, as FindLongestMatch needs this. + * This should only happen when flushing and the window + * is almost full. + */ + this.slideWindow(); + } + + let hashHead: number; + if (this.lookahead >= DeflaterConstants.MIN_MATCH && + (hashHead = this.insertString()) != 0 && + this.strategy != DeflateStrategy.HuffmanOnly && + this.strstart - hashHead <= DeflaterConstants.MAX_DIST && + this.findLongestMatch(hashHead)) { + // longestMatch sets matchStart and matchLen + + let full = this.huffman.tallyDist(this.strstart - this.matchStart, this.matchLen); + + this.lookahead -= this.matchLen; + if (this.matchLen <= this.max_lazy && this.lookahead >= DeflaterConstants.MIN_MATCH) { + while (--this.matchLen > 0) { + ++this.strstart; + this.insertString(); + } + ++this.strstart; + } + else { + this.strstart += this.matchLen; + if (this.lookahead >= DeflaterConstants.MIN_MATCH - 1) { + this.updateHash(); + } + } + this.matchLen = DeflaterConstants.MIN_MATCH - 1; + if (!full) { + continue; + } + } + else { + // No match found + this.huffman.tallyLit(this.window[this.strstart] & 0xff); + ++this.strstart; + --this.lookahead; + } + + if (this.huffman.isFull()) { + let lastBlock = finish && (this.lookahead == 0); + this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, lastBlock); + this.blockStart = this.strstart; + return !lastBlock; + } + } + return true; + } + + private deflateSlow(flush: boolean, finish: boolean): boolean { + if (this.lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) { + return false; + } + + while (this.lookahead >= DeflaterConstants.MIN_LOOKAHEAD || flush) { + if (this.lookahead == 0) { + if (this.prevAvailable) { + this.huffman.tallyLit(this.window[this.strstart - 1] & 0xff); + } + this.prevAvailable = false; + + // We are flushing everything + this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, + finish); + this.blockStart = this.strstart; + return false; + } + + if (this.strstart >= 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD) { + /* slide window, as FindLongestMatch needs this. + * This should only happen when flushing and the window + * is almost full. + */ + this.slideWindow(); + } + + let prevMatch = this.matchStart; + let prevLen = this.matchLen; + if (this.lookahead >= DeflaterConstants.MIN_MATCH) { + let hashHead = this.insertString(); + + if (this.strategy != DeflateStrategy.HuffmanOnly && + hashHead != 0 && + this.strstart - hashHead <= DeflaterConstants.MAX_DIST && + this.findLongestMatch(hashHead)) { + // longestMatch sets matchStart and matchLen + + // Discard match if too small and too far away + if (this.matchLen <= 5 && (this.strategy == DeflateStrategy.Filtered || (this.matchLen == DeflaterConstants.MIN_MATCH && this.strstart - this.matchStart > DeflaterEngine.TooFar))) { + this.matchLen = DeflaterConstants.MIN_MATCH - 1; + } + } + } + + // previous match was better + if ((prevLen >= DeflaterConstants.MIN_MATCH) && (this.matchLen <= prevLen)) { + + this.huffman.tallyDist(this.strstart - 1 - prevMatch, prevLen); + prevLen -= 2; + do { + this.strstart++; + this.lookahead--; + if (this.lookahead >= DeflaterConstants.MIN_MATCH) { + this.insertString(); + } + } while (--prevLen > 0); + + this.strstart++; + this.lookahead--; + this.prevAvailable = false; + this.matchLen = DeflaterConstants.MIN_MATCH - 1; + } + else { + if (this.prevAvailable) { + this.huffman.tallyLit(this.window[this.strstart - 1] & 0xff); + } + this.prevAvailable = true; + this.strstart++; + this.lookahead--; + } + + if (this.huffman.isFull()) { + let len = this.strstart - this.blockStart; + if (this.prevAvailable) { + len--; + } + let lastBlock = (finish && (this.lookahead == 0) && !this.prevAvailable); + this.huffman.flushBlock(this.window, this.blockStart, len, lastBlock); + this.blockStart += len; + return !lastBlock; + } + } + return true; + } + + + /** + * Find the best (longest) string in the window matching the + * string starting at strstart. + * @param curMatch + * @returns True if a match greater than the minimum length is found + */ + private findLongestMatch(curMatch: number): boolean { + let match: number; + let scan = this.strstart; + // scanMax is the highest position that we can look at + let scanMax = scan + Math.min(DeflaterConstants.MAX_MATCH, this.lookahead) - 1; + let limit = Math.max(scan - DeflaterConstants.MAX_DIST, 0); + + let window = this.window; + let prev = this.prev; + let chainLength = this.max_chain; + let niceLength = Math.min(this.niceLength, this.lookahead); + + this.matchLen = Math.max(this.matchLen, DeflaterConstants.MIN_MATCH - 1); + + if (scan + this.matchLen > scanMax) { + return false; + } + + let scan_end1 = window[scan + this.matchLen - 1]; + let scan_end = window[scan + this.matchLen]; + + // Do not waste too much time if we already have a good match: + if (this.matchLen >= this.goodLength) { + chainLength >>= 2; + } + + do { + match = curMatch; + scan = this.strstart; + + if (window[match + this.matchLen] != scan_end + || window[match + this.matchLen - 1] != scan_end1 + || window[match] != window[scan] + || window[++match] != window[++scan]) { + continue; + } + + // scan is set to strstart+1 and the comparison passed, so + // scanMax - scan is the maximum number of bytes we can compare. + // below we compare 8 bytes at a time, so first we compare + // (scanMax - scan) % 8 bytes, so the remainder is a multiple of 8 + + switch ((scanMax - scan) % 8) { + case 1: + if (window[++scan] == window[++match]) break; + break; + + case 2: + if (window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + + case 3: + if (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + + case 4: + if (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + + case 5: + if (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + + case 6: + if (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + + case 7: + if (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]) break; + break; + } + + if (window[scan] == window[match]) { + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart + 258 unless lookahead is + * exhausted first. + */ + do { + if (scan == scanMax) { + ++scan; // advance to first position not matched + ++match; + + break; + } + } + while (window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match] + && window[++scan] == window[++match]); + } + + if (scan - this.strstart > this.matchLen) { + this.matchStart = curMatch; + this.matchLen = scan - this.strstart; + + if (this.matchLen >= niceLength) { + break; + } + + scan_end1 = window[scan - 1]; + scan_end = window[scan]; + } + } while ((curMatch = (prev[curMatch & DeflaterConstants.WMASK] & 0xffff)) > limit && 0 != --chainLength); + + return this.matchLen >= DeflaterConstants.MIN_MATCH; + } + + + /** + * Inserts the current string in the head hash and returns the previous + * value for this hash. + * @returns The previous hash value + */ + private insertString(): number { + let match: number; + let hash = ((this.ins_h << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + (DeflaterConstants.MIN_MATCH - 1)]) & DeflaterConstants.HASH_MASK; + + this.prev[this.strstart & DeflaterConstants.WMASK] = match = this.head[hash]; + this.head[hash] = this.strstart; + this.ins_h = hash; + return match & 0xffff; + } + + /** + * Fill the window + */ + public fillWindow() { + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (this.strstart >= DeflaterConstants.WSIZE + DeflaterConstants.MAX_DIST) { + this.slideWindow(); + } + + /* If there is not enough lookahead, but still some input left, + * read in the input + */ + if (this.lookahead < DeflaterConstants.MIN_LOOKAHEAD && this.inputOff < this.inputEnd) { + let more = 2 * DeflaterConstants.WSIZE - this.lookahead - this.strstart; + + if (more > this.inputEnd - this.inputOff) { + more = this.inputEnd - this.inputOff; + } + + this.window.set(this.inputBuf!.subarray(this.inputOff, this.inputOff + more), this.strstart + this.lookahead); + this.inputCrc.update(this.inputBuf!, this.inputOff, more); + this.adler?.update(this.inputBuf!, this.inputOff, more); + + this.inputOff += more; + // this.totalIn += more; + this.lookahead += more; + } + + if (this.lookahead >= DeflaterConstants.MIN_MATCH) { + this.updateHash(); + } + } + + private slideWindow() { + this.window.set(this.window.subarray(DeflaterConstants.WSIZE, DeflaterConstants.WSIZE + DeflaterConstants.WSIZE), 0); + this.matchStart -= DeflaterConstants.WSIZE; + this.strstart -= DeflaterConstants.WSIZE; + this.blockStart -= DeflaterConstants.WSIZE; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). + for (let i = 0; i < DeflaterConstants.HASH_SIZE; ++i) { + let m = this.head[i] & 0xffff; + this.head[i] = (m >= DeflaterConstants.WSIZE ? (m - DeflaterConstants.WSIZE) : 0); + } + + // Slide the prev table. + for (let i = 0; i < DeflaterConstants.WSIZE; i++) { + let m = this.prev[i] & 0xffff; + this.prev[i] = (m >= DeflaterConstants.WSIZE ? (m - DeflaterConstants.WSIZE) : 0); + } + } +} \ No newline at end of file diff --git a/src/zip/DeflaterHuffman.ts b/src/zip/DeflaterHuffman.ts new file mode 100644 index 000000000..3d8214d54 --- /dev/null +++ b/src/zip/DeflaterHuffman.ts @@ -0,0 +1,731 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { DeflaterConstants } from "./DeflaterConstants"; +import { DeflaterPending } from "./DeflaterPending"; + + +class Tree { + // repeat previous bit length 3-6 times (2 bits of repeat count) + private static readonly REP_3_6 = 16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + private static readonly REP_3_10 = 17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + private static readonly REP_11_138 = 18; + + public freqs: Int16Array; + + public length: Uint8Array | null = null; + + public minNumCodes: number; + + public numCodes: number = 0; + + private codes: Int16Array | null = null; + private readonly bl_counts: Int32Array; + private readonly maxLength: number; + private dh: DeflaterHuffman; + + public constructor(dh: DeflaterHuffman, elems: number, minCodes: number, maxLength: number) { + this.dh = dh; + this.minNumCodes = minCodes; + this.maxLength = maxLength; + this.freqs = new Int16Array(elems); + this.bl_counts = new Int32Array(maxLength); + } + + /** + * Resets the internal state of the tree + */ + public reset() { + for (let i = 0; i < this.freqs.length; i++) { + this.freqs[i] = 0; + } + this.codes = null; + this.length = null; + } + + + public buildTree() { + let numSymbols = this.freqs.length; + + /* heap is a priority queue, sorted by frequency, least frequent + * nodes first. The heap is a binary tree, with the property, that + * the parent node is smaller than both child nodes. This assures + * that the smallest node is the first parent. + * + * The binary tree is encoded in an array: 0 is root node and + * the nodes 2*n+1, 2*n+2 are the child nodes of node n. + */ + let heap = new Int32Array(numSymbols); + let heapLen = 0; + let maxCode = 0; + for (let n = 0; n < numSymbols; n++) { + let freq = this.freqs[n]; + if (freq != 0) { + // Insert n into heap + let pos = heapLen++; + let ppos; + while (pos > 0 && this.freqs[heap[ppos = Math.floor((pos - 1) / 2)]] > freq) { + heap[pos] = heap[ppos]; + pos = ppos; + } + heap[pos] = n; + + maxCode = n; + } + } + + /* We could encode a single literal with 0 bits but then we + * don't see the literals. Therefore we force at least two + * literals to avoid this case. We don't care about order in + * this case, both literals get a 1 bit code. + */ + while (heapLen < 2) { + let node = maxCode < 2 ? ++maxCode : 0; + heap[heapLen++] = node; + } + + this.numCodes = Math.max(maxCode + 1, this.minNumCodes); + + let numLeafs = heapLen; + let childs = new Int32Array(4 * heapLen - 2); + let values = new Int32Array(2 * heapLen - 1); + let numNodes = numLeafs; + for (let i = 0; i < heapLen; i++) { + let node = heap[i]; + childs[2 * i] = node; + childs[2 * i + 1] = -1; + values[i] = this.freqs[node] << 8; + heap[i] = i; + } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + do { + let first = heap[0]; + let last = heap[--heapLen]; + + // Propagate the hole to the leafs of the heap + let ppos = 0; + let path = 1; + + while (path < heapLen) { + if (path + 1 < heapLen && values[heap[path]] > values[heap[path + 1]]) { + path++; + } + + heap[ppos] = heap[path]; + ppos = path; + path = path * 2 + 1; + } + + /* Now propagate the last element down along path. Normally + * it shouldn't go too deep. + */ + let lastVal = values[last]; + while ((path = ppos) > 0 && values[heap[ppos = Math.floor((path - 1) / 2)]] > lastVal) { + heap[path] = heap[ppos]; + } + heap[path] = last; + + let second = heap[0]; + + // Create a new node father of first and second + last = numNodes++; + childs[2 * last] = first; + childs[2 * last + 1] = second; + let mindepth = Math.min(values[first] & 0xff, values[second] & 0xff); + values[last] = lastVal = values[first] + values[second] - mindepth + 1; + + // Again, propagate the hole to the leafs + ppos = 0; + path = 1; + + while (path < heapLen) { + if (path + 1 < heapLen && values[heap[path]] > values[heap[path + 1]]) { + path++; + } + + heap[ppos] = heap[path]; + ppos = path; + path = ppos * 2 + 1; + } + + // Now propagate the new element down along path + while ((path = ppos) > 0 && values[heap[ppos = Math.floor((path - 1) / 2)]] > lastVal) { + heap[path] = heap[ppos]; + } + heap[path] = last; + } while (heapLen > 1); + + this.buildLength(childs); + } + + + private buildLength(childs: Int32Array) { + this.length = new Uint8Array(this.freqs.length); + let numNodes = Math.floor(childs.length / 2); + let numLeafs = Math.floor((numNodes + 1) / 2); + let overflow = 0; + + for (let i = 0; i < this.maxLength; i++) { + this.bl_counts[i] = 0; + } + + // First calculate optimal bit lengths + let lengths = new Int32Array(numNodes); + lengths[numNodes - 1] = 0; + + for (let i = numNodes - 1; i >= 0; i--) { + if (childs[2 * i + 1] != -1) { + let bitLength = lengths[i] + 1; + if (bitLength > this.maxLength) { + bitLength = this.maxLength; + overflow++; + } + lengths[childs[2 * i]] = lengths[childs[2 * i + 1]] = bitLength; + } + else { + // A leaf node + let bitLength = lengths[i]; + this.bl_counts[bitLength - 1]++; + this.length[childs[2 * i]] = lengths[i]; + } + } + + if (overflow == 0) { + return; + } + + let incrBitLen = this.maxLength - 1; + do { + // Find the first bit length which could increase: + while (this.bl_counts[--incrBitLen] == 0) { + } + + // Move this node one down and remove a corresponding + // number of overflow nodes. + do { + this.bl_counts[incrBitLen]--; + this.bl_counts[++incrBitLen]++; + overflow -= 1 << (this.maxLength - 1 - incrBitLen); + } while (overflow > 0 && incrBitLen < this.maxLength - 1); + } while (overflow > 0); + + /* We may have overshot above. Move some nodes from maxLength to + * maxLength-1 in that case. + */ + this.bl_counts[this.maxLength - 1] += overflow; + this.bl_counts[this.maxLength - 2] -= overflow; + + /* Now recompute all bit lengths, scanning in increasing + * frequency. It is simpler to reconstruct all lengths instead of + * fixing only the wrong ones. This idea is taken from 'ar' + * written by Haruhiko Okumura. + * + * The nodes were inserted with decreasing frequency into the childs + * array. + */ + let nodePtr = 2 * numLeafs; + for (let bits = this.maxLength; bits != 0; bits--) { + let n = this.bl_counts[bits - 1]; + while (n > 0) { + let childPtr = 2 * childs[nodePtr++]; + if (childs[childPtr + 1] == -1) { + // We found another leaf + this.length[childs[childPtr]] = bits; + n--; + } + } + } + } + + /** + * Get encoded length + * @returns Encoded length, the sum of frequencies * lengths + */ + public getEncodedLength(): number { + let len = 0; + for (let i = 0; i < this.freqs.length; i++) { + len += this.freqs[i] * this.length![i]; + } + return len; + } + + /** + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + * @param blTree + */ + public calcBLFreq(blTree: Tree) { + let max_count: number; /* max repeat count */ + let min_count: number; /* min repeat count */ + let count: number; /* repeat count of the current code */ + let curlen = -1; /* length of current code */ + + let i = 0; + while (i < this.numCodes) { + count = 1; + let nextlen = this.length![i]; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + else { + max_count = 6; + min_count = 3; + if (curlen != nextlen) { + blTree.freqs[nextlen]++; + count = 0; + } + } + curlen = nextlen; + i++; + + while (i < this.numCodes && curlen == this.length![i]) { + i++; + if (++count >= max_count) { + break; + } + } + + if (count < min_count) { + blTree.freqs[curlen] += count; + } + else if (curlen != 0) { + blTree.freqs[Tree.REP_3_6]++; + } + else if (count <= 10) { + blTree.freqs[Tree.REP_3_10]++; + } + else { + blTree.freqs[Tree.REP_11_138]++; + } + } + } + + /** + * Set static codes and length + * @param staticCodes new codes + * @param staticLengths length for new codes + */ + public setStaticCodes(staticCodes: Int16Array, staticLengths: Uint8Array) { + this.codes = staticCodes; + this.length = staticLengths; + } + + + /** + * Build dynamic codes and lengths + */ + public buildCodes() { + let nextCode = new Int32Array(this.maxLength); + let code = 0; + + this.codes = new Int16Array(this.freqs.length); + + for (let bits = 0; bits < this.maxLength; bits++) { + nextCode[bits] = code; + code += this.bl_counts[bits] << (15 - bits); + + } + + for (let i = 0; i < this.numCodes; i++) { + let bits = this.length![i]; + if (bits > 0) { + this.codes[i] = DeflaterHuffman.bitReverse(nextCode[bits - 1]); + nextCode[bits - 1] += 1 << (16 - bits); + } + } + } + + /** + * Write tree values + * @param blTree Tree to write + */ + public writeTree(blTree: Tree) { + let max_count: number; // max repeat count + let min_count: number; // min repeat count + let count: number; // repeat count of the current code + let curlen = -1; // length of current code + + let i = 0; + while (i < this.numCodes) { + count = 1; + let nextlen = this.length![i]; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + else { + max_count = 6; + min_count = 3; + if (curlen != nextlen) { + blTree.writeSymbol(nextlen); + count = 0; + } + } + curlen = nextlen; + i++; + + while (i < this.numCodes && curlen == this.length![i]) { + i++; + if (++count >= max_count) { + break; + } + } + + if (count < min_count) { + while (count-- > 0) { + blTree.writeSymbol(curlen); + } + } + else if (curlen != 0) { + blTree.writeSymbol(Tree.REP_3_6); + this.dh.pending.writeBits(count - 3, 2); + } + else if (count <= 10) { + blTree.writeSymbol(Tree.REP_3_10); + this.dh.pending.writeBits(count - 3, 3); + } + else { + blTree.writeSymbol(Tree.REP_11_138); + this.dh.pending.writeBits(count - 11, 7); + } + } + } + + public writeSymbol(code: number) { + this.dh.pending.writeBits(this.codes![code] & 0xffff, this.length![code]); + } +} + +export class DeflaterHuffman { + private static readonly BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6); + private static readonly LITERAL_NUM = 286; + + // Number of distance codes + private static readonly DIST_NUM = 30; + + + private static staticLCodes: Int16Array; + private static staticLLength: Uint8Array; + private static staticDCodes: Int16Array; + private static staticDLength: Uint8Array; + + public static staticInit() { + // See RFC 1951 3.2.6 + // Literal codes + DeflaterHuffman.staticLCodes = new Int16Array(DeflaterHuffman.LITERAL_NUM); + DeflaterHuffman.staticLLength = new Uint8Array(DeflaterHuffman.LITERAL_NUM); + + let i = 0; + while (i < 144) { + DeflaterHuffman.staticLCodes[i] = DeflaterHuffman.bitReverse((0x030 + i) << 8); + DeflaterHuffman.staticLLength[i++] = 8; + } + + while (i < 256) { + DeflaterHuffman.staticLCodes[i] = DeflaterHuffman.bitReverse((0x190 - 144 + i) << 7); + DeflaterHuffman.staticLLength[i++] = 9; + } + + while (i < 280) { + DeflaterHuffman.staticLCodes[i] = DeflaterHuffman.bitReverse((0x000 - 256 + i) << 9); + DeflaterHuffman.staticLLength[i++] = 7; + } + + while (i < DeflaterHuffman.LITERAL_NUM) { + DeflaterHuffman.staticLCodes[i] = DeflaterHuffman.bitReverse((0x0c0 - 280 + i) << 8); + DeflaterHuffman.staticLLength[i++] = 8; + } + + // Distance codes + DeflaterHuffman.staticDCodes = new Int16Array(DeflaterHuffman.DIST_NUM); + DeflaterHuffman.staticDLength = new Uint8Array(DeflaterHuffman.DIST_NUM); + for (i = 0; i < DeflaterHuffman.DIST_NUM; i++) { + DeflaterHuffman.staticDCodes[i] = DeflaterHuffman.bitReverse(i << 11); + DeflaterHuffman.staticDLength[i] = 5; + } + } + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit length codes. + private static readonly BL_ORDER: number[] = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + + private static readonly bit4Reverse: Uint8Array = new Uint8Array([ + 0, + 8, + 4, + 12, + 2, + 10, + 6, + 14, + 1, + 9, + 5, + 13, + 3, + 11, + 7, + 15 + ]); + + /** + * Reverse the bits of a 16 bit value. + * @param toReverse Value to reverse bits + * @returns Value with bits reversed + */ + public static bitReverse(toReverse: number): number { + return (DeflaterHuffman.bit4Reverse[toReverse & 0xF] << 12 | + DeflaterHuffman.bit4Reverse[(toReverse >> 4) & 0xF] << 8 | + DeflaterHuffman.bit4Reverse[(toReverse >> 8) & 0xF] << 4 | + DeflaterHuffman.bit4Reverse[toReverse >> 12]); + } + + // Number of codes used to transfer bit lengths + private static readonly BITLEN_NUM = 19; + + + + private static readonly EOF_SYMBOL = 256; + + + /** + * Pending buffer to use + */ + public pending: DeflaterPending; + + private literalTree: Tree; + private distTree: Tree; + private blTree: Tree; + + // Buffer for distances + private d_buf: Int16Array; + + private l_buf: Uint8Array; + private last_lit: number = 0; + private extra_bits: number = 0; + + public constructor(pending: DeflaterPending) { + this.pending = pending; + + this.literalTree = new Tree(this, DeflaterHuffman.LITERAL_NUM, 257, 15); + this.distTree = new Tree(this, DeflaterHuffman.DIST_NUM, 1, 15); + this.blTree = new Tree(this, DeflaterHuffman.BITLEN_NUM, 4, 7); + + this.d_buf = new Int16Array(DeflaterHuffman.BUFSIZE); + this.l_buf = new Uint8Array(DeflaterHuffman.BUFSIZE); + } + + public isFull(): boolean { + return this.last_lit >= DeflaterHuffman.BUFSIZE; + } + + public reset() { + this.last_lit = 0; + this.extra_bits = 0; + this.literalTree.reset(); + this.distTree.reset(); + this.blTree.reset(); + } + + public flushStoredBlock(stored: Uint8Array, storedOffset: number, storedLength: number, lastBlock: boolean) { + this.pending.writeBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); + this.pending.alignToByte(); + this.pending.writeShort(storedLength); + this.pending.writeShort(~storedLength); + this.pending.writeBlock(stored, storedOffset, storedLength); + this.reset(); + } + + public flushBlock(stored: Uint8Array, storedOffset: number, storedLength: number, lastBlock: boolean) { + this.literalTree.freqs[DeflaterHuffman.EOF_SYMBOL]++; + + // Build trees + this.literalTree.buildTree(); + this.distTree.buildTree(); + + // Calculate bitlen frequency + this.literalTree.calcBLFreq(this.blTree); + this.distTree.calcBLFreq(this.blTree); + + // Build bitlen tree + this.blTree.buildTree(); + + let blTreeCodes = 4; + for (let i = 18; i > blTreeCodes; i--) { + if (this.blTree.length![DeflaterHuffman.BL_ORDER[i]] > 0) { + blTreeCodes = i + 1; + } + } + let opt_len = 14 + blTreeCodes * 3 + this.blTree.getEncodedLength() + + this.literalTree.getEncodedLength() + this.distTree.getEncodedLength() + + this.extra_bits; + + let static_len = this.extra_bits; + for (let i = 0; i < DeflaterHuffman.LITERAL_NUM; i++) { + static_len += this.literalTree.freqs[i] * DeflaterHuffman.staticLLength[i]; + } + for (let i = 0; i < DeflaterHuffman.DIST_NUM; i++) { + static_len += this.distTree.freqs[i] * DeflaterHuffman.staticDLength[i]; + } + if (opt_len >= static_len) { + // Force static trees + opt_len = static_len; + } + + if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) { + // Store Block + this.flushStoredBlock(stored, storedOffset, storedLength, lastBlock); + } + else if (opt_len == static_len) { + // Encode with static tree + this.pending.writeBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); + this.literalTree.setStaticCodes(DeflaterHuffman.staticLCodes, DeflaterHuffman.staticLLength); + this.distTree.setStaticCodes(DeflaterHuffman.staticDCodes, DeflaterHuffman.staticDLength); + this.compressBlock(); + this.reset(); + } + else { + // Encode with dynamic tree + this.pending.writeBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); + this.sendAllTrees(blTreeCodes); + this.compressBlock(); + this.reset(); + } + } + + /** + * Write all trees to pending buffer + * @param blTreeCodes The number/rank of treecodes to send. + */ + public sendAllTrees(blTreeCodes: number) { + this.blTree.buildCodes(); + this.literalTree.buildCodes(); + this.distTree.buildCodes(); + this.pending.writeBits(this.literalTree.numCodes - 257, 5); + this.pending.writeBits(this.distTree.numCodes - 1, 5); + this.pending.writeBits(blTreeCodes - 4, 4); + for (let rank = 0; rank < blTreeCodes; rank++) { + this.pending.writeBits(this.blTree.length![DeflaterHuffman.BL_ORDER[rank]], 3); + } + this.literalTree.writeTree(this.blTree); + this.distTree.writeTree(this.blTree); + } + + /** + * Compress current buffer writing data to pending buffer + */ + public compressBlock() { + for (let i = 0; i < this.last_lit; i++) { + let litlen = this.l_buf[i] & 0xff; + let dist = this.d_buf[i]; + if (dist-- != 0) { + let lc = DeflaterHuffman.Lcode(litlen); + this.literalTree.writeSymbol(lc); + + let bits = Math.floor((lc - 261) / 4); + if (bits > 0 && bits <= 5) { + this.pending.writeBits(litlen & ((1 << bits) - 1), bits); + } + + let dc = DeflaterHuffman.Dcode(dist); + this.distTree.writeSymbol(dc); + + bits = Math.floor(dc / 2) - 1; + if (bits > 0) { + this.pending.writeBits(dist & ((1 << bits) - 1), bits); + } + } + else { + this.literalTree.writeSymbol(litlen); + } + } + + this.literalTree.writeSymbol(DeflaterHuffman.EOF_SYMBOL); + } + + /** + * Add distance code and length to literal and distance trees + * @param distance Distance code + * @param length Length + * @returns Value indicating if internal buffer is full + */ + public tallyDist(distance: number, length: number): boolean { + this.d_buf[this.last_lit] = distance; + this.l_buf[this.last_lit++] = (length - 3); + + let lc = DeflaterHuffman.Lcode(length - 3); + this.literalTree.freqs[lc]++; + if (lc >= 265 && lc < 285) { + this.extra_bits += Math.floor((lc - 261) / 4); + } + + let dc = DeflaterHuffman.Dcode(distance - 1); + this.distTree.freqs[dc]++; + if (dc >= 4) { + this.extra_bits += Math.floor(dc / 2) - 1; + } + return this.isFull(); + } + + /** + * Add literal to buffer + * @param literal Literal value to add to buffer + * @returns Value indicating internal buffer is full + */ + public tallyLit(literal: number): boolean { + this.d_buf[this.last_lit] = 0; + this.l_buf[this.last_lit++] = literal; + this.literalTree.freqs[literal]++; + return this.isFull(); + } + + private static Lcode(length: number): number { + if (length == 255) { + return 285; + } + + let code = 257; + while (length >= 8) { + code += 4; + length >>= 1; + } + return code + length; + } + + private static Dcode(distance: number): number { + let code = 0; + while (distance >= 4) { + code += 2; + distance >>= 1; + } + return code + distance; + } +} + +DeflaterHuffman.staticInit(); diff --git a/src/zip/DeflaterPending.ts b/src/zip/DeflaterPending.ts new file mode 100644 index 000000000..606c7670e --- /dev/null +++ b/src/zip/DeflaterPending.ts @@ -0,0 +1,36 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +import { DeflaterConstants } from "./DeflaterConstants"; +import { PendingBuffer } from "./PendingBuffer"; + +/** + * This class stores the pending output of the Deflater. + * author of the original java version : Jochen Hoenicke + */ +export class DeflaterPending extends PendingBuffer { + /** + * Construct instance with default buffer size + */ + public constructor() { + super(DeflaterConstants.PENDING_BUF_SIZE); + } +} \ No newline at end of file diff --git a/src/zip/PendingBuffer.ts b/src/zip/PendingBuffer.ts new file mode 100644 index 000000000..52cc55d6c --- /dev/null +++ b/src/zip/PendingBuffer.ts @@ -0,0 +1,149 @@ +// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) +// https://github.com/icsharpcode/SharpZipLib +/* + * Copyright © 2000-2018 SharpZipLib Contributors + * Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software + * without restriction, including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +/** + * This class is general purpose class for writing data to a buffer. + * It allows you to write bits as well as bytes + * Based on DeflaterPending.java + */ +export class PendingBuffer { + private _buffer: Uint8Array; + private _start: number = 0; + private _end: number = 0; + private _bits: number = 0; + + /** + * The number of bits written to the buffer + */ + public bitCount: number = 0; + + /** + * Indicates if buffer has been flushed + */ + public get isFlushed(): boolean { + return this._end === 0; + } + + /** + * construct instance using specified buffer size + * @param bufferSize size to use for internal buffer + */ + public constructor(bufferSize: number) { + this._buffer = new Uint8Array(bufferSize); + } + + /** + * Clear internal state/buffers + */ + public reset() { + this._start = 0; + this._end = 0; + this.bitCount = 0; + } + + /** + * Write a short value to internal buffer most significant byte first + * @param s value to write + */ + public writeShortMSB(s: number) { + this._buffer[this._end++] = (s >> 8) & 0xFF; + this._buffer[this._end++] = s & 0xFF; + } + + /** + * Write a short value to buffer LSB first + * @param value The value to write. + */ + public writeShort(value: number) { + this._buffer[this._end++] = value; + this._buffer[this._end++] = (value >> 8); + } + + + /** + * Write a block of data to buffer + * @param block data to write + * @param offset offset of first byte to write + * @param length number of bytes to write + */ + public writeBlock(block: Uint8Array, offset: number, length: number) { + this._buffer.set(block.subarray(offset, offset + length), this._end); + this._end += length; + } + + /** + * Flushes the pending buffer into the given output array. If the + * output array is to small, only a partial flush is done. + * @param output The output array. + * @param offset The offset into output array. + * @param length The maximum number of bytes to store. + * @returns The number of bytes flushed. + */ + public flush(output: Uint8Array, offset: number, length: number) { + if (this.bitCount >= 8) { + this._buffer[this._end++] = this._bits & 0xFF; + this._bits >>= 8; + this.bitCount -= 8; + } + + if (length > this._end - this._start) { + length = this._end - this._start; + output.set(this._buffer.subarray(this._start, this._start + length), offset); + this._start = 0; + this._end = 0; + } + else { + output.set(this._buffer.subarray(this._start, this._start + length), offset); + this._start += length; + } + return length; + } + + /** + * Write bits to internal buffer + * @param b source of bits + * @param count number of bits to write + */ + public writeBits(b: number, count: number) { + this._bits |= b << this.bitCount; + this.bitCount += count; + if (this.bitCount >= 16) { + this._buffer[this._end++] = this._bits & 0xFF; + this._buffer[this._end++] = (this._bits >> 8) & 0xFF; + this._bits >>= 16; + this.bitCount -= 16; + } + } + + /** + * Align internal buffer on a byte boundary + */ + public alignToByte() { + if (this.bitCount > 0) { + this._buffer[this._end++] = this._bits & 0xFF; + if (this.bitCount > 8) { + this._buffer[this._end++] = (this._bits >> 8) & 0xFF; + } + } + this._bits = 0; + this.bitCount = 0; + } +} diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index fb3651d0a..43eaf1c4a 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -1,22 +1,34 @@ +import { ByteBuffer } from '@src/io/ByteBuffer'; import { IOHelper } from '@src/io/IOHelper'; import { IWriteable } from '@src/io/IWriteable'; +import { Crc32 } from './Crc32'; +import { Deflater } from './Deflater'; import { ZipEntry } from './ZipEntry'; class ZipCentralDirectoryHeader { public entry: ZipEntry; public localHeaderOffset: number; + public compressedSize: number; public crc32: number; + public compressionMode: number; - public constructor(entry: ZipEntry, crc32: number, localHeaderOffset: number) { + public constructor(entry: ZipEntry, + crc32: number, + localHeaderOffset: number, + compressionMode: number, + compressedSize: number) { this.entry = entry; this.crc32 = crc32; this.localHeaderOffset = localHeaderOffset; + this.compressionMode = compressionMode; + this.compressedSize = compressedSize; } } export class ZipWriter { private _data: IWriteable; private _centralDirectoryHeaders: ZipCentralDirectoryHeader[] = []; + private _deflater: Deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true); public constructor(data: IWriteable) { this._data = data; @@ -24,18 +36,22 @@ export class ZipWriter { public writeEntry(entry: ZipEntry) { // 4.3.7 local file header + const compressionMode = ZipEntry.CompressionMethodDeflate; - const crc32 = ZipWriter.crc32(entry.data); - this._centralDirectoryHeaders.push(new ZipCentralDirectoryHeader(entry, crc32, this._data.bytesWritten)); + const compressedData = ByteBuffer.empty(); + const crc32 = this.compress(compressedData, entry.data, compressionMode); + const compressedDataArray = compressedData.toArray(); + const directoryHeader = new ZipCentralDirectoryHeader(entry, crc32, this._data.bytesWritten, compressionMode, compressedData.length); + this._centralDirectoryHeaders.push(directoryHeader); // Signature IOHelper.writeInt32LE(this._data, ZipEntry.LocalFileHeaderSignature); // Version IOHelper.writeUInt16LE(this._data, 10); // Flags - IOHelper.writeUInt16LE(this._data, 0); + IOHelper.writeUInt16LE(this._data, 0x0800); // Compression - IOHelper.writeUInt16LE(this._data, 0); + IOHelper.writeUInt16LE(this._data, compressionMode); // last mod file time IOHelper.writeInt16LE(this._data, 0); // last mod file date @@ -43,7 +59,7 @@ export class ZipWriter { // crc-32 IOHelper.writeInt32LE(this._data, crc32); // compressed size - IOHelper.writeInt32LE(this._data, entry.data.length); + IOHelper.writeInt32LE(this._data, compressedDataArray.length); // uncompressed size IOHelper.writeInt32LE(this._data, entry.data.length); // file name length @@ -57,34 +73,46 @@ export class ZipWriter { // // 4.3.8 File Data - this._data.write(entry.data, 0, entry.data.length); + this._data.write(compressedDataArray, 0, compressedDataArray.length); } - private static readonly Crc32Lookup: Uint32Array = ZipWriter.buildCrc32Lookup(); - private static buildCrc32Lookup(): Uint32Array { - const poly = 0xedb88320; - const lookup = new Uint32Array(256); - for(let i = 0; i < lookup.length; i++) { - let crc = i; - for (let bit = 0; bit < 8; bit++) { - crc = (crc & 1) === 1 ? (crc >>> 1) ^ poly : crc >>> 1; + private compress(output: IWriteable, data: Uint8Array, compressionMode: number): number { + if (compressionMode != ZipEntry.CompressionMethodDeflate) { + const crc = new Crc32(); + crc.update(data, 0, data.length); + output.write(data, 0, data.length); + return crc.value; + } else { + let buffer: Uint8Array = new Uint8Array(512); + + // init deflater + this._deflater.reset(); + this._deflater.setLevel(Deflater.DEFAULT_COMPRESSION); + + // write data + this._deflater.setInput(data, 0, data.length); + while (!this._deflater.isNeedingInput) { + const len = this._deflater.deflate(buffer, 0, buffer.length); + if (len <= 0) { + break; + } + + output.write(buffer, 0, len); } - lookup[i] = crc; - } - return lookup; - } + // let deflater finish up + this._deflater.finish(); + while (!this._deflater.isFinished) { + const len = this._deflater.deflate(buffer, 0, buffer.length); + if (len <= 0) { + break; + } - // TypeScript definition, for reference. - // export default function crc32( data: Buffer | Uint8Array | number[] ) { - private static crc32(input: Uint8Array) { - let crc = 0xffffffff; + output.write(buffer, 0, len); + } - for(let i = 0, j = input.length; i < j; i++) { - crc = ZipWriter.Crc32Lookup[(crc ^ input[i]) & 0xff] ^ (crc >>> 8); + return this._deflater.inputCrc; } - - return ~crc; } public end() { @@ -138,9 +166,9 @@ export class ZipWriter { // version needed to extract IOHelper.writeUInt16LE(this._data, 10); // Flags - IOHelper.writeUInt16LE(this._data, 0); + IOHelper.writeUInt16LE(this._data, 0x0800); // Compression - IOHelper.writeUInt16LE(this._data, 0); + IOHelper.writeUInt16LE(this._data, header.compressionMode); // last mod file time IOHelper.writeInt16LE(this._data, 0); // last mod file date @@ -148,7 +176,7 @@ export class ZipWriter { // crc-32 IOHelper.writeInt32LE(this._data, header.crc32); // compressed size - IOHelper.writeInt32LE(this._data, header.entry.data.length); + IOHelper.writeInt32LE(this._data, header.compressedSize); // uncompressed size IOHelper.writeInt32LE(this._data, header.entry.data.length); // file name length From 630ee9ab775c5b1d819bd30dfac6baccd95aabd5 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 22:37:57 +0100 Subject: [PATCH 27/31] Bit codestyle cleanup --- src/zip/Adler32.ts | 6 +- src/zip/DeflateStrategy.ts | 42 ------- src/zip/Deflater.ts | 169 +++++---------------------- src/zip/DeflaterConstants.ts | 45 +------ src/zip/DeflaterEngine.ts | 219 +++-------------------------------- src/zip/DeflaterHuffman.ts | 95 ++++++++------- src/zip/DeflaterPending.ts | 36 ------ src/zip/Inflate.ts | 18 +-- src/zip/ZipWriter.ts | 3 +- 9 files changed, 115 insertions(+), 518 deletions(-) delete mode 100644 src/zip/DeflateStrategy.ts delete mode 100644 src/zip/DeflaterPending.ts diff --git a/src/zip/Adler32.ts b/src/zip/Adler32.ts index 8b3527d27..1659d6c1d 100644 --- a/src/zip/Adler32.ts +++ b/src/zip/Adler32.ts @@ -32,7 +32,7 @@ export class Adler32 { /** * largest prime smaller than 65536 */ - private static readonly BASE: number = 65521; + private static readonly Base: number = 65521; /** @@ -77,8 +77,8 @@ export class Adler32 { s1 = s1 + (data[offset++] & 0xff); s2 = s2 + s1; } - s1 %= Adler32.BASE; - s2 %= Adler32.BASE; + s1 %= Adler32.Base; + s2 %= Adler32.Base; } this.value = (s2 << 16) | s1; } diff --git a/src/zip/DeflateStrategy.ts b/src/zip/DeflateStrategy.ts deleted file mode 100644 index 7d325ce3b..000000000 --- a/src/zip/DeflateStrategy.ts +++ /dev/null @@ -1,42 +0,0 @@ -// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) -// https://github.com/icsharpcode/SharpZipLib -/* - * Copyright © 2000-2018 SharpZipLib Contributors - * Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software - * without restriction, including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE - * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -/** - * Strategies for deflater - */ -export enum DeflateStrategy { - /** - * The default strategy - */ - Default = 0, - - /** - * This strategy will only allow longer string repetitions. It is - * useful for random data with a small character set. - */ - Filtered = 1, - - /** - * This strategy will not look for string repetitions at all. It - * only encodes with Huffman trees (which means, that more common - * characters get a smaller encoding. - */ - HuffmanOnly = 2 -} \ No newline at end of file diff --git a/src/zip/Deflater.ts b/src/zip/Deflater.ts index 998f64938..96417581d 100644 --- a/src/zip/Deflater.ts +++ b/src/zip/Deflater.ts @@ -21,8 +21,7 @@ import { DeflaterConstants } from "./DeflaterConstants"; import { DeflaterEngine } from "./DeflaterEngine"; -import { DeflaterPending } from "./DeflaterPending"; -import { DeflateStrategy } from "./DeflateStrategy"; +import { PendingBuffer } from "./PendingBuffer"; /** * This is the Deflater class. The deflater class compresses input @@ -70,47 +69,16 @@ export class Deflater { * */ - public static readonly DEFAULT_COMPRESSION: number = -1; + private static readonly IsFlushing: number = 0x04; + private static readonly IsFinishing: number = 0x08; - /** - * This level won't compress at all but output uncompressed blocks. - */ - public static readonly NO_COMPRESSION: number = 0; - - /** - * The best and slowest compression level. This tries to find very - * long and distant string repetitions. - */ - public static readonly BEST_COMPRESSION: number = 9; - - /** - * The compression method. This is the only method supported so far. - * There is no need to use this constant at all. - */ - public static readonly DEFLATED: number = 8; - - - private static readonly IS_SETDICT: number = 0x01; - private static readonly IS_FLUSHING: number = 0x04; - private static readonly IS_FINISHING: number = 0x08; - - private static readonly INIT_STATE: number = 0x00; - private static readonly BUSY_STATE: number = 0x10; - - private static readonly FLUSHING_STATE: number = 0x14; - private static readonly FINISHING_STATE: number = 0x1c; - private static readonly FINISHED_STATE: number = 0x1e; - - - /** - * If true no Zlib/RFC1950 headers or footers are generated - */ - private _noZlibHeaderOrFooter: boolean = false; + private static readonly BusyState: number = 0x10; + private static readonly FlushingState: number = 0x14; + private static readonly FinishingState: number = 0x1c; + private static readonly FinishedState: number = 0x1e; private _state: number = 0; - // private _totalOut: number = 0; - private _level: number = 0; - private _pending: DeflaterPending; + private _pending: PendingBuffer; private _engine: DeflaterEngine; public get inputCrc(): number { @@ -120,51 +88,15 @@ export class Deflater { /** * Creates a new deflater with given compression level * @param level the compression level, a value between NO_COMPRESSION and BEST_COMPRESSION. - * @param noZlibHeaderOrFooter true, if we should suppress the Zlib/RFC1950 header at the * beginning and the adler checksum at the end of the output. This is * useful for the GZIP/PKZIP formats. */ - public constructor(level: number, noZlibHeaderOrFooter: boolean) { - this._pending = new DeflaterPending(); - this._engine = new DeflaterEngine(this._pending, noZlibHeaderOrFooter); - this._noZlibHeaderOrFooter = noZlibHeaderOrFooter; - this.setStrategy(DeflateStrategy.Default); - this.setLevel(level); + public constructor() { + this._pending = new PendingBuffer(DeflaterConstants.PENDING_BUF_SIZE); + this._engine = new DeflaterEngine(this._pending); this.reset(); } - /** - * Sets the compression strategy. Strategy is one of - * DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact - * position where the strategy is changed, the same as for - * SetLevel() applies. - * @param strategy The new compression strategy. - */ - public setStrategy(strategy: DeflateStrategy) { - this._engine.strategy = strategy; - } - - /** - * Sets the compression level. There is no guarantee of the exact - * position of the change, but if you call this when needsInput is - * true the change of compression level will occur somewhere near - * before the end of the so far given input. - * @param level the new compression level. - */ - public setLevel(level: number) { - if (level == Deflater.DEFAULT_COMPRESSION) { - level = 6; - } - else if (level < Deflater.NO_COMPRESSION || level > Deflater.BEST_COMPRESSION) { - throw new Error("level out of range"); - } - - if (this._level != level) { - this._level = level; - this._engine.setLevel(level); - } - } - /** * Returns true, if the input buffer is empty. * You should then call setInput(). @@ -180,7 +112,7 @@ export class Deflater { * are available. */ public get isFinished() { - return (this._state == Deflater.FINISHED_STATE) && this._pending.isFlushed; + return (this._state == Deflater.FinishedState) && this._pending.isFlushed; } /** @@ -189,8 +121,7 @@ export class Deflater { * had before. */ public reset() { - this._state = (this._noZlibHeaderOrFooter ? Deflater.BUSY_STATE : Deflater.INIT_STATE); - // this._totalOut = 0; + this._state = Deflater.BusyState; this._pending.reset(); this._engine.reset(); } @@ -219,76 +150,40 @@ export class Deflater { public deflate(output: Uint8Array, offset: number, length: number): number { let origLength = length; - if (this._state < Deflater.BUSY_STATE) { - // output header - let header = (Deflater.DEFLATED + - ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8; - let level_flags = (this._level - 1) >> 1; - if (level_flags < 0 || level_flags > 3) { - level_flags = 3; - } - header |= level_flags << 6; - if ((this._state & Deflater.IS_SETDICT) != 0) { - // Dictionary was set - header |= DeflaterConstants.PRESET_DICT; - } - header += 31 - (header % 31); - - this._pending.writeShortMSB(header); - if ((this._state & Deflater.IS_SETDICT) != 0) { - let chksum = this._engine.adler?.value ?? 0; - this._engine.resetAdler(); - this._pending.writeShortMSB(chksum >> 16); - this._pending.writeShortMSB(chksum & 0xffff); - } - - this._state = Deflater.BUSY_STATE | (this._state & (Deflater.IS_FLUSHING | Deflater.IS_FINISHING)); - } - for (; ;) { let count = this._pending.flush(output, offset, length); offset += count; - // this._totalOut += count; length -= count; - if (length == 0 || this._state == Deflater.FINISHED_STATE) { + if (length == 0 || this._state == Deflater.FinishedState) { break; } - if (!this._engine.deflate((this._state & Deflater.IS_FLUSHING) != 0, (this._state & Deflater.IS_FINISHING) != 0)) { + if (!this._engine.deflate((this._state & Deflater.IsFlushing) != 0, (this._state & Deflater.IsFinishing) != 0)) { switch (this._state) { - case Deflater.BUSY_STATE: + case Deflater.BusyState: // We need more input now return origLength - length; - case Deflater.FLUSHING_STATE: - if (this._level != Deflater.NO_COMPRESSION) { - /* We have to supply some lookahead. 8 bit lookahead - * is needed by the zlib inflater, and we must fill - * the next byte, so that all bits are flushed. - */ - let neededbits = 8 + ((-this._pending.bitCount) & 7); - while (neededbits > 0) { - /* write a static tree block consisting solely of - * an EOF: - */ - this._pending.writeBits(2, 10); - neededbits -= 10; - } + case Deflater.FlushingState: + /* We have to supply some lookahead. 8 bit lookahead + * is needed by the zlib inflater, and we must fill + * the next byte, so that all bits are flushed. + */ + let neededbits = 8 + ((-this._pending.bitCount) & 7); + while (neededbits > 0) { + /* write a static tree block consisting solely of + * an EOF: + */ + this._pending.writeBits(2, 10); + neededbits -= 10; } - this._state = Deflater.BUSY_STATE; + this._state = Deflater.BusyState; break; - case Deflater.FINISHING_STATE: + case Deflater.FinishingState: this._pending.alignToByte(); - - // Compressed data is complete. Write footer information if required. - if (!this._noZlibHeaderOrFooter) { - let adler = this._engine.adler?.value ?? 0; - this._pending.writeShortMSB(adler >> 16); - this._pending.writeShortMSB(adler & 0xffff); - } - this._state = Deflater.FINISHED_STATE; + this._state = Deflater.FinishedState; break; } } @@ -303,6 +198,6 @@ export class Deflater { * be called to force all bytes to be flushed. */ public finish() { - this._state |= (Deflater.IS_FLUSHING | Deflater.IS_FINISHING); + this._state |= (Deflater.IsFlushing | Deflater.IsFinishing); } } diff --git a/src/zip/DeflaterConstants.ts b/src/zip/DeflaterConstants.ts index 9cc00a7cc..3e2bbf06b 100644 --- a/src/zip/DeflaterConstants.ts +++ b/src/zip/DeflaterConstants.ts @@ -18,69 +18,26 @@ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ + /** * This class contains constants used for deflation. */ export class DeflaterConstants { public static readonly MAX_WBITS: number = 15; - public static readonly WSIZE: number = 1 << DeflaterConstants.MAX_WBITS; public static readonly WMASK: number = DeflaterConstants.WSIZE - 1; public static readonly MIN_MATCH: number = 3; public static readonly MAX_MATCH: number = 258; - /** - * Written to Zip file to identify a stored block - */ - public static readonly STORED_BLOCK = 0; - - /** - * Identifies static tree in Zip file - */ - public static readonly STATIC_TREES = 1; - - /** - * Identifies dynamic tree in Zip file - */ - public static readonly DYN_TREES = 2; - - - - /** - * Header flag indicating a preset dictionary for deflation - */ - public static readonly PRESET_DICT: number = 0x20; - - /** - * Sets internal buffer sizes for Huffman encoding - */ public static readonly DEFAULT_MEM_LEVEL: number = 8; - public static readonly PENDING_BUF_SIZE: number = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 8); - public static readonly MAX_BLOCK_SIZE: number = Math.min(65535, DeflaterConstants.PENDING_BUF_SIZE - 5); - - public static readonly HASH_BITS: number = DeflaterConstants.DEFAULT_MEM_LEVEL + 7; - public static readonly HASH_SIZE: number = 1 << DeflaterConstants.HASH_BITS; public static readonly HASH_SHIFT: number = (DeflaterConstants.HASH_BITS + DeflaterConstants.MIN_MATCH - 1) / DeflaterConstants.MIN_MATCH; - public static readonly HASH_MASK: number = DeflaterConstants.HASH_SIZE - 1; public static readonly MIN_LOOKAHEAD: number = DeflaterConstants.MAX_MATCH + DeflaterConstants.MIN_MATCH + 1; public static readonly MAX_DIST: number = DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD; - - - public static readonly GOOD_LENGTH: number[] = [0, 4, 4, 4, 4, 8, 8, 8, 32, 32]; - - public static readonly MAX_LAZY: number[] = [0, 4, 5, 6, 4, 16, 16, 32, 128, 258]; - public static readonly NICE_LENGTH: number[] = [0, 8, 16, 32, 16, 32, 128, 128, 258, 258]; - public static readonly MAX_CHAIN: number[] = [0, 4, 8, 32, 16, 32, 128, 256, 1024, 4096]; - public static readonly COMPR_FUNC: number[] = [0, 1, 1, 1, 1, 2, 2, 2, 2, 2]; - - public static readonly DEFLATE_STORED: number = 0; - public static readonly DEFLATE_FAST: number = 1; - public static readonly DEFLATE_SLOW: number = 2; } \ No newline at end of file diff --git a/src/zip/DeflaterEngine.ts b/src/zip/DeflaterEngine.ts index ff4e6e72c..f21a95bab 100644 --- a/src/zip/DeflaterEngine.ts +++ b/src/zip/DeflaterEngine.ts @@ -19,12 +19,10 @@ * DEALINGS IN THE SOFTWARE. */ -import { Adler32 } from "./Adler32"; import { Crc32 } from "./Crc32"; import { DeflaterConstants } from "./DeflaterConstants"; import { DeflaterHuffman } from "./DeflaterHuffman"; -import { DeflaterPending } from "./DeflaterPending"; -import { DeflateStrategy } from "./DeflateStrategy"; +import { PendingBuffer } from "./PendingBuffer"; /** * Low level compression engine for deflate algorithm which uses a 32K sliding window @@ -34,20 +32,14 @@ export class DeflaterEngine { private static readonly TooFar: number = 4096; private blockStart: number; - private max_chain: number = 0; - private max_lazy: number = 0; - private niceLength: number = 0; - private goodLength: number = 0; + private maxChain: number = 128; + private niceLength: number = 128; + private goodLength: number = 8; /** * Hash index of string to be inserted */ - private ins_h: number = 0; - - /** - * The current compression function. - */ - private compressionFunction: number = 0; + private insertHashIndex: number = 0; /** * Points to the current character in the window. @@ -90,11 +82,6 @@ export class DeflaterEngine { */ private inputBuf: Uint8Array | null = null; - // /** - // * The total bytes of input read. - // */ - // private totalIn: number = 0; - /** * The offset into inputBuf, where input data starts. */ @@ -118,34 +105,20 @@ export class DeflaterEngine { */ private matchLen: number = 0; - private pending: DeflaterPending; + private pending: PendingBuffer; private huffman: DeflaterHuffman; public inputCrc: Crc32; - /** - * The adler checksum - */ - public adler: Adler32 | null; - - /** - * Get/set the deflate strategy - */ - public strategy: DeflateStrategy = DeflateStrategy.Default; /** * Construct instance with pending buffer * @param pending Pending buffer to use * @param noAdlerCalculation Pending buffer to use */ - public constructor(pending: DeflaterPending, noAdlerCalculation: boolean) { + public constructor(pending: PendingBuffer) { this.pending = pending; this.huffman = new DeflaterHuffman(pending); this.inputCrc = new Crc32(); - if (!noAdlerCalculation) { - this.adler = new Adler32(); - } else { - this.adler = null; - } this.window = new Uint8Array(2 * DeflaterConstants.WSIZE); this.head = new Int16Array(DeflaterConstants.HASH_SIZE); @@ -157,24 +130,15 @@ export class DeflaterEngine { this.strstart = 1; } - /** - * Reset Adler checksum - */ - public resetAdler() { - this.adler?.reset(); - } - /** * Reset internal state */ public reset() { this.huffman.reset(); - this.adler?.reset(); this.inputCrc.reset(); this.blockStart = 1; this.strstart = 1; this.lookahead = 0; - // this.totalIn = 0; this.prevAvailable = false; this.matchLen = DeflaterConstants.MIN_MATCH - 1; @@ -187,53 +151,9 @@ export class DeflaterEngine { } } - /** - * Set the deflate level (0-9) - * @param level The value to set the level to. - */ - public setLevel(level: number) { - this.goodLength = DeflaterConstants.GOOD_LENGTH[level]; - this.max_lazy = DeflaterConstants.MAX_LAZY[level]; - this.niceLength = DeflaterConstants.NICE_LENGTH[level]; - this.max_chain = DeflaterConstants.MAX_CHAIN[level]; - - if (DeflaterConstants.COMPR_FUNC[level] != this.compressionFunction) { - switch (this.compressionFunction) { - case DeflaterConstants.DEFLATE_STORED: - if (this.strstart > this.blockStart) { - this.huffman.flushStoredBlock(this.window, this.blockStart, - this.strstart - this.blockStart, false); - this.blockStart = this.strstart; - } - this.updateHash(); - break; - - case DeflaterConstants.DEFLATE_FAST: - if (this.strstart > this.blockStart) { - this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, - false); - this.blockStart = this.strstart; - } - break; - - case DeflaterConstants.DEFLATE_SLOW: - if (this.prevAvailable) { - this.huffman.tallyLit(this.window[this.strstart - 1] & 0xff); - } - if (this.strstart > this.blockStart) { - this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, false); - this.blockStart = this.strstart; - } - this.prevAvailable = false; - this.matchLen = DeflaterConstants.MIN_MATCH - 1; - break; - } - this.compressionFunction = DeflaterConstants.COMPR_FUNC[level]; - } - } private updateHash() { - this.ins_h = (this.window[this.strstart] << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + 1]; + this.insertHashIndex = (this.window[this.strstart] << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + 1]; } /** @@ -269,120 +189,11 @@ export class DeflaterEngine { do { this.fillWindow(); let canFlush = flush && (this.inputOff == this.inputEnd); - - switch (this.compressionFunction) { - case DeflaterConstants.DEFLATE_STORED: - progress = this.deflateStored(canFlush, finish); - break; - - case DeflaterConstants.DEFLATE_FAST: - progress = this.deflateFast(canFlush, finish); - break; - - case DeflaterConstants.DEFLATE_SLOW: - progress = this.deflateSlow(canFlush, finish); - break; - - default: - throw new Error("unknown compressionFunction"); - } + progress = this.deflateSlow(canFlush, finish); } while (this.pending.isFlushed && progress); // repeat while we have no pending output and progress was made return progress; } - private deflateStored(flush: boolean, finish: boolean): boolean { - if (!flush && (this.lookahead == 0)) { - return false; - } - - this.strstart += this.lookahead; - this.lookahead = 0; - - let storedLength = this.strstart - this.blockStart; - - if ((storedLength >= DeflaterConstants.MAX_BLOCK_SIZE) || // Block is full - (this.blockStart < DeflaterConstants.WSIZE && storedLength >= DeflaterConstants.MAX_DIST) || // Block may move out of window - flush) { - let lastBlock = finish; - if (storedLength > DeflaterConstants.MAX_BLOCK_SIZE) { - storedLength = DeflaterConstants.MAX_BLOCK_SIZE; - lastBlock = false; - } - - this.huffman.flushStoredBlock(this.window, this.blockStart, storedLength, lastBlock); - this.blockStart += storedLength; - return !(lastBlock || storedLength == 0); - } - return true; - } - - private deflateFast(flush: boolean, finish: boolean): boolean { - if (this.lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) { - return false; - } - - while (this.lookahead >= DeflaterConstants.MIN_LOOKAHEAD || flush) { - if (this.lookahead == 0) { - // We are flushing everything - this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, finish); - this.blockStart = this.strstart; - return false; - } - - if (this.strstart > 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD) { - /* slide window, as FindLongestMatch needs this. - * This should only happen when flushing and the window - * is almost full. - */ - this.slideWindow(); - } - - let hashHead: number; - if (this.lookahead >= DeflaterConstants.MIN_MATCH && - (hashHead = this.insertString()) != 0 && - this.strategy != DeflateStrategy.HuffmanOnly && - this.strstart - hashHead <= DeflaterConstants.MAX_DIST && - this.findLongestMatch(hashHead)) { - // longestMatch sets matchStart and matchLen - - let full = this.huffman.tallyDist(this.strstart - this.matchStart, this.matchLen); - - this.lookahead -= this.matchLen; - if (this.matchLen <= this.max_lazy && this.lookahead >= DeflaterConstants.MIN_MATCH) { - while (--this.matchLen > 0) { - ++this.strstart; - this.insertString(); - } - ++this.strstart; - } - else { - this.strstart += this.matchLen; - if (this.lookahead >= DeflaterConstants.MIN_MATCH - 1) { - this.updateHash(); - } - } - this.matchLen = DeflaterConstants.MIN_MATCH - 1; - if (!full) { - continue; - } - } - else { - // No match found - this.huffman.tallyLit(this.window[this.strstart] & 0xff); - ++this.strstart; - --this.lookahead; - } - - if (this.huffman.isFull()) { - let lastBlock = finish && (this.lookahead == 0); - this.huffman.flushBlock(this.window, this.blockStart, this.strstart - this.blockStart, lastBlock); - this.blockStart = this.strstart; - return !lastBlock; - } - } - return true; - } - private deflateSlow(flush: boolean, finish: boolean): boolean { if (this.lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) { return false; @@ -415,14 +226,13 @@ export class DeflaterEngine { if (this.lookahead >= DeflaterConstants.MIN_MATCH) { let hashHead = this.insertString(); - if (this.strategy != DeflateStrategy.HuffmanOnly && - hashHead != 0 && + if (hashHead != 0 && this.strstart - hashHead <= DeflaterConstants.MAX_DIST && this.findLongestMatch(hashHead)) { // longestMatch sets matchStart and matchLen // Discard match if too small and too far away - if (this.matchLen <= 5 && (this.strategy == DeflateStrategy.Filtered || (this.matchLen == DeflaterConstants.MIN_MATCH && this.strstart - this.matchStart > DeflaterEngine.TooFar))) { + if (this.matchLen == DeflaterConstants.MIN_MATCH && this.strstart - this.matchStart > DeflaterEngine.TooFar) { this.matchLen = DeflaterConstants.MIN_MATCH - 1; } } @@ -485,7 +295,7 @@ export class DeflaterEngine { let window = this.window; let prev = this.prev; - let chainLength = this.max_chain; + let chainLength = this.maxChain; let niceLength = Math.min(this.niceLength, this.lookahead); this.matchLen = Math.max(this.matchLen, DeflaterConstants.MIN_MATCH - 1); @@ -616,11 +426,11 @@ export class DeflaterEngine { */ private insertString(): number { let match: number; - let hash = ((this.ins_h << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + (DeflaterConstants.MIN_MATCH - 1)]) & DeflaterConstants.HASH_MASK; + let hash = ((this.insertHashIndex << DeflaterConstants.HASH_SHIFT) ^ this.window[this.strstart + (DeflaterConstants.MIN_MATCH - 1)]) & DeflaterConstants.HASH_MASK; this.prev[this.strstart & DeflaterConstants.WMASK] = match = this.head[hash]; this.head[hash] = this.strstart; - this.ins_h = hash; + this.insertHashIndex = hash; return match & 0xffff; } @@ -647,7 +457,6 @@ export class DeflaterEngine { this.window.set(this.inputBuf!.subarray(this.inputOff, this.inputOff + more), this.strstart + this.lookahead); this.inputCrc.update(this.inputBuf!, this.inputOff, more); - this.adler?.update(this.inputBuf!, this.inputOff, more); this.inputOff += more; // this.totalIn += more; diff --git a/src/zip/DeflaterHuffman.ts b/src/zip/DeflaterHuffman.ts index 3d8214d54..f47545e0c 100644 --- a/src/zip/DeflaterHuffman.ts +++ b/src/zip/DeflaterHuffman.ts @@ -20,18 +20,18 @@ */ import { DeflaterConstants } from "./DeflaterConstants"; -import { DeflaterPending } from "./DeflaterPending"; +import { PendingBuffer } from "./PendingBuffer"; class Tree { // repeat previous bit length 3-6 times (2 bits of repeat count) - private static readonly REP_3_6 = 16; + private static readonly Repeat3To6 = 16; // repeat a zero length 3-10 times (3 bits of repeat count) - private static readonly REP_3_10 = 17; + private static readonly Repeat3To10 = 17; // repeat a zero length 11-138 times (7 bits of repeat count) - private static readonly REP_11_138 = 18; + private static readonly Repeat11To138 = 18; public freqs: Int16Array; @@ -42,16 +42,16 @@ class Tree { public numCodes: number = 0; private codes: Int16Array | null = null; - private readonly bl_counts: Int32Array; + private readonly bitLengthCounts: Int32Array; private readonly maxLength: number; - private dh: DeflaterHuffman; + private huffman: DeflaterHuffman; public constructor(dh: DeflaterHuffman, elems: number, minCodes: number, maxLength: number) { - this.dh = dh; + this.huffman = dh; this.minNumCodes = minCodes; this.maxLength = maxLength; this.freqs = new Int16Array(elems); - this.bl_counts = new Int32Array(maxLength); + this.bitLengthCounts = new Int32Array(maxLength); } /** @@ -191,7 +191,7 @@ class Tree { let overflow = 0; for (let i = 0; i < this.maxLength; i++) { - this.bl_counts[i] = 0; + this.bitLengthCounts[i] = 0; } // First calculate optimal bit lengths @@ -210,7 +210,7 @@ class Tree { else { // A leaf node let bitLength = lengths[i]; - this.bl_counts[bitLength - 1]++; + this.bitLengthCounts[bitLength - 1]++; this.length[childs[2 * i]] = lengths[i]; } } @@ -222,14 +222,14 @@ class Tree { let incrBitLen = this.maxLength - 1; do { // Find the first bit length which could increase: - while (this.bl_counts[--incrBitLen] == 0) { + while (this.bitLengthCounts[--incrBitLen] == 0) { } // Move this node one down and remove a corresponding // number of overflow nodes. do { - this.bl_counts[incrBitLen]--; - this.bl_counts[++incrBitLen]++; + this.bitLengthCounts[incrBitLen]--; + this.bitLengthCounts[++incrBitLen]++; overflow -= 1 << (this.maxLength - 1 - incrBitLen); } while (overflow > 0 && incrBitLen < this.maxLength - 1); } while (overflow > 0); @@ -237,8 +237,8 @@ class Tree { /* We may have overshot above. Move some nodes from maxLength to * maxLength-1 in that case. */ - this.bl_counts[this.maxLength - 1] += overflow; - this.bl_counts[this.maxLength - 2] -= overflow; + this.bitLengthCounts[this.maxLength - 1] += overflow; + this.bitLengthCounts[this.maxLength - 2] -= overflow; /* Now recompute all bit lengths, scanning in increasing * frequency. It is simpler to reconstruct all lengths instead of @@ -250,7 +250,7 @@ class Tree { */ let nodePtr = 2 * numLeafs; for (let bits = this.maxLength; bits != 0; bits--) { - let n = this.bl_counts[bits - 1]; + let n = this.bitLengthCounts[bits - 1]; while (n > 0) { let childPtr = 2 * childs[nodePtr++]; if (childs[childPtr + 1] == -1) { @@ -315,13 +315,13 @@ class Tree { blTree.freqs[curlen] += count; } else if (curlen != 0) { - blTree.freqs[Tree.REP_3_6]++; + blTree.freqs[Tree.Repeat3To6]++; } else if (count <= 10) { - blTree.freqs[Tree.REP_3_10]++; + blTree.freqs[Tree.Repeat3To10]++; } else { - blTree.freqs[Tree.REP_11_138]++; + blTree.freqs[Tree.Repeat11To138]++; } } } @@ -348,7 +348,7 @@ class Tree { for (let bits = 0; bits < this.maxLength; bits++) { nextCode[bits] = code; - code += this.bl_counts[bits] << (15 - bits); + code += this.bitLengthCounts[bits] << (15 - bits); } @@ -366,8 +366,8 @@ class Tree { * @param blTree Tree to write */ public writeTree(blTree: Tree) { - let max_count: number; // max repeat count - let min_count: number; // min repeat count + let maxCount: number; // max repeat count + let minCount: number; // min repeat count let count: number; // repeat count of the current code let curlen = -1; // length of current code @@ -376,12 +376,12 @@ class Tree { count = 1; let nextlen = this.length![i]; if (nextlen == 0) { - max_count = 138; - min_count = 3; + maxCount = 138; + minCount = 3; } else { - max_count = 6; - min_count = 3; + maxCount = 6; + minCount = 3; if (curlen != nextlen) { blTree.writeSymbol(nextlen); count = 0; @@ -392,33 +392,33 @@ class Tree { while (i < this.numCodes && curlen == this.length![i]) { i++; - if (++count >= max_count) { + if (++count >= maxCount) { break; } } - if (count < min_count) { + if (count < minCount) { while (count-- > 0) { blTree.writeSymbol(curlen); } } else if (curlen != 0) { - blTree.writeSymbol(Tree.REP_3_6); - this.dh.pending.writeBits(count - 3, 2); + blTree.writeSymbol(Tree.Repeat3To6); + this.huffman.pending.writeBits(count - 3, 2); } else if (count <= 10) { - blTree.writeSymbol(Tree.REP_3_10); - this.dh.pending.writeBits(count - 3, 3); + blTree.writeSymbol(Tree.Repeat3To10); + this.huffman.pending.writeBits(count - 3, 3); } else { - blTree.writeSymbol(Tree.REP_11_138); - this.dh.pending.writeBits(count - 11, 7); + blTree.writeSymbol(Tree.Repeat11To138); + this.huffman.pending.writeBits(count - 11, 7); } } } public writeSymbol(code: number) { - this.dh.pending.writeBits(this.codes![code] & 0xffff, this.length![code]); + this.huffman.pending.writeBits(this.codes![code] & 0xffff, this.length![code]); } } @@ -426,6 +426,21 @@ export class DeflaterHuffman { private static readonly BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6); private static readonly LITERAL_NUM = 286; + /** + * Written to Zip file to identify a stored block + */ + public static readonly STORED_BLOCK = 0; + + /** + * Identifies static tree in Zip file + */ + public static readonly STATIC_TREES = 1; + + /** + * Identifies dynamic tree in Zip file + */ + public static readonly DYN_TREES = 2; + // Number of distance codes private static readonly DIST_NUM = 30; @@ -517,7 +532,7 @@ export class DeflaterHuffman { /** * Pending buffer to use */ - public pending: DeflaterPending; + public pending: PendingBuffer; private literalTree: Tree; private distTree: Tree; @@ -530,7 +545,7 @@ export class DeflaterHuffman { private last_lit: number = 0; private extra_bits: number = 0; - public constructor(pending: DeflaterPending) { + public constructor(pending: PendingBuffer) { this.pending = pending; this.literalTree = new Tree(this, DeflaterHuffman.LITERAL_NUM, 257, 15); @@ -554,7 +569,7 @@ export class DeflaterHuffman { } public flushStoredBlock(stored: Uint8Array, storedOffset: number, storedLength: number, lastBlock: boolean) { - this.pending.writeBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); + this.pending.writeBits((DeflaterHuffman.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); this.pending.alignToByte(); this.pending.writeShort(storedLength); this.pending.writeShort(~storedLength); @@ -604,7 +619,7 @@ export class DeflaterHuffman { } else if (opt_len == static_len) { // Encode with static tree - this.pending.writeBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); + this.pending.writeBits((DeflaterHuffman.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); this.literalTree.setStaticCodes(DeflaterHuffman.staticLCodes, DeflaterHuffman.staticLLength); this.distTree.setStaticCodes(DeflaterHuffman.staticDCodes, DeflaterHuffman.staticDLength); this.compressBlock(); @@ -612,7 +627,7 @@ export class DeflaterHuffman { } else { // Encode with dynamic tree - this.pending.writeBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); + this.pending.writeBits((DeflaterHuffman.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); this.sendAllTrees(blTreeCodes); this.compressBlock(); this.reset(); diff --git a/src/zip/DeflaterPending.ts b/src/zip/DeflaterPending.ts deleted file mode 100644 index 606c7670e..000000000 --- a/src/zip/DeflaterPending.ts +++ /dev/null @@ -1,36 +0,0 @@ -// This Deflate algorithm is based on the Deflater class of the SharpZipLib (MIT) -// https://github.com/icsharpcode/SharpZipLib -/* - * Copyright © 2000-2018 SharpZipLib Contributors - * Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software - * without restriction, including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE - * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -import { DeflaterConstants } from "./DeflaterConstants"; -import { PendingBuffer } from "./PendingBuffer"; - -/** - * This class stores the pending output of the Deflater. - * author of the original java version : Jochen Hoenicke - */ -export class DeflaterPending extends PendingBuffer { - /** - * Construct instance with default buffer size - */ - public constructor() { - super(DeflaterConstants.PENDING_BUF_SIZE); - } -} \ No newline at end of file diff --git a/src/zip/Inflate.ts b/src/zip/Inflate.ts index 98a0149d9..e5cf59725 100644 --- a/src/zip/Inflate.ts +++ b/src/zip/Inflate.ts @@ -1,13 +1,4 @@ // This Inflate algorithm is based on the Inflate class of the Haxe Standard Library (MIT) -import { FormatError } from '@src/FormatError'; -import { IOHelper } from '@src/io/IOHelper'; -import { IReadable } from '@src/io/IReadable'; -import { - Found as HuffmanFound, - Huffman, - NeedBit as HuffmanNeedBit, - NeedBits as HuffmanNeedBits -} from '@src/zip/Huffman'; /* * Copyright (C)2005-2019 Haxe Foundation * @@ -29,6 +20,15 @@ import { * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ +import { FormatError } from '@src/FormatError'; +import { IOHelper } from '@src/io/IOHelper'; +import { IReadable } from '@src/io/IReadable'; +import { + Found as HuffmanFound, + Huffman, + NeedBit as HuffmanNeedBit, + NeedBits as HuffmanNeedBits +} from '@src/zip/Huffman'; import { HuffTools } from '@src/zip/HuffTools'; enum InflateState { diff --git a/src/zip/ZipWriter.ts b/src/zip/ZipWriter.ts index 43eaf1c4a..862c8e7a1 100644 --- a/src/zip/ZipWriter.ts +++ b/src/zip/ZipWriter.ts @@ -28,7 +28,7 @@ class ZipCentralDirectoryHeader { export class ZipWriter { private _data: IWriteable; private _centralDirectoryHeaders: ZipCentralDirectoryHeader[] = []; - private _deflater: Deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true); + private _deflater: Deflater = new Deflater(); public constructor(data: IWriteable) { this._data = data; @@ -87,7 +87,6 @@ export class ZipWriter { // init deflater this._deflater.reset(); - this._deflater.setLevel(Deflater.DEFAULT_COMPRESSION); // write data this._deflater.setInput(data, 0, data.length); From 1a8e31859363121de0b888e1a764472e39458fa3 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 22:52:36 +0100 Subject: [PATCH 28/31] Added some zip tests --- test/zip/ZipReaderWriter.test.ts | 57 ++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 test/zip/ZipReaderWriter.test.ts diff --git a/test/zip/ZipReaderWriter.test.ts b/test/zip/ZipReaderWriter.test.ts new file mode 100644 index 000000000..78abcebe9 --- /dev/null +++ b/test/zip/ZipReaderWriter.test.ts @@ -0,0 +1,57 @@ +import { ByteBuffer } from "@src/io/ByteBuffer"; +import { IOHelper } from "@src/io/IOHelper"; +import { ZipEntry } from "@src/zip/ZipEntry"; +import { ZipReader } from "@src/zip/ZipReader"; +import { ZipWriter } from "@src/zip/ZipWriter"; +import { TestPlatform } from "@test/TestPlatform"; + +describe('ZipReaderWriter', () => { + it('simple-read', async () => { + const data = await TestPlatform.loadFile('test-data/guitarpro7/score-info.gp'); + const reader = new ZipReader(ByteBuffer.fromBuffer(data)); + const entries = reader.read(); + entries.sort((a, b) => a.fileName.localeCompare(b.fileName)); + + expect(entries.map(e => e.fileName).join(',')).toEqual('BinaryStylesheet,Content/,LayoutConfiguration,PartConfiguration,Preferences.json,score.gpif,VERSION'); + expect(entries.map(e => e.data.length).join(',')).toEqual('19651,0,14,27,192,22998,3'); + }); + + it('simple-roundtrip', () => { + const data = ByteBuffer.withCapacity(1024); + const writer = new ZipWriter(data); + + const entry1 = new ZipEntry('File01.txt', IOHelper.stringToBytes('File01')); + const entry2 = new ZipEntry('Folder/', new Uint8Array(0)); + const entry3 = new ZipEntry('Folder/File02.txt', IOHelper.stringToBytes('File02')); + + const textParts = [ + '', 'Text', 'Hello World', 'alphaTab', 'Deflate', + 'Lorem ipsum dolor sit amet' + ]; + + let text = ''; + while(text.length < 8 * 1024) { + text += textParts[Math.floor(Math.random() * textParts.length)]; + } + const entry4 = new ZipEntry('LargeFile', IOHelper.stringToBytes(text)); + + writer.writeEntry(entry1); + writer.writeEntry(entry2); + writer.writeEntry(entry3); + writer.writeEntry(entry4); + writer.end(); + + data.position = 0; + const reader = new ZipReader(data); + const entries = reader.read(); + + expect(entries[0].fileName).toEqual('File01.txt'); + expect(IOHelper.toString(entries[0].data, 'utf-8')).toEqual('File01'); + + expect(entries[2].fileName).toEqual('File02.txt'); + expect(IOHelper.toString(entries[2].data, 'utf-8')).toEqual('File02'); + + expect(entries[3].fileName).toEqual('LargeFile'); + expect(IOHelper.toString(entries[3].data, 'utf-8')).toEqual(text); + }); +}); From 25aa3ea16b856cc27c9a015a1d9581d80e131495 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 23:00:18 +0100 Subject: [PATCH 29/31] Fixed C# version --- .../AlphaTab/Core/EcmaScript/Int16Array.cs | 2 ++ src.csharp/AlphaTab/Core/TypeHelper.cs | 20 +++++++------------ test/zip/ZipReaderWriter.test.ts | 5 ++--- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs b/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs index 10c6b6b35..242ff45ea 100644 --- a/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs +++ b/src.csharp/AlphaTab/Core/EcmaScript/Int16Array.cs @@ -9,6 +9,8 @@ public class Int16Array : IEnumerable { private readonly short[] _data; + public double Length => _data.Length; + public Int16Array(double size) { _data = new short[(int) size]; diff --git a/src.csharp/AlphaTab/Core/TypeHelper.cs b/src.csharp/AlphaTab/Core/TypeHelper.cs index 6c41cb724..d97473d84 100644 --- a/src.csharp/AlphaTab/Core/TypeHelper.cs +++ b/src.csharp/AlphaTab/Core/TypeHelper.cs @@ -6,6 +6,7 @@ using System.Runtime.CompilerServices; using AlphaTab.Core.EcmaScript; using AlphaTab.Rendering.Glyphs; +using String = System.String; namespace AlphaTab.Core { @@ -16,19 +17,6 @@ public static IList CreateList(params T[] values) return new List(values); } - public static IEnumerable SetInitializer(params T[] values) - { - return new List(values); - } - - public static IList Splice(this IList data, double start) - { - var count = data.Count - (int) start; - var items = data.GetRange((int) start, count); - data.RemoveRange((int) start, count); - return new List(items); - } - public static IList Splice(this IList data, double start, double deleteCount) { var items = data.GetRange((int) start, (int) deleteCount); @@ -248,6 +236,12 @@ public static string ToUpperCase(this string s) return s.ToUpperInvariant(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int LocaleCompare(this string a, string b) + { + return string.Compare(a, b, StringComparison.Ordinal); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IList Split(this string s, string separator) { diff --git a/test/zip/ZipReaderWriter.test.ts b/test/zip/ZipReaderWriter.test.ts index 78abcebe9..6a3b2e2ac 100644 --- a/test/zip/ZipReaderWriter.test.ts +++ b/test/zip/ZipReaderWriter.test.ts @@ -10,10 +10,9 @@ describe('ZipReaderWriter', () => { const data = await TestPlatform.loadFile('test-data/guitarpro7/score-info.gp'); const reader = new ZipReader(ByteBuffer.fromBuffer(data)); const entries = reader.read(); - entries.sort((a, b) => a.fileName.localeCompare(b.fileName)); - expect(entries.map(e => e.fileName).join(',')).toEqual('BinaryStylesheet,Content/,LayoutConfiguration,PartConfiguration,Preferences.json,score.gpif,VERSION'); - expect(entries.map(e => e.data.length).join(',')).toEqual('19651,0,14,27,192,22998,3'); + expect(entries.map(e => e.fileName).join(',')).toEqual('Content/,BinaryStylesheet,LayoutConfiguration,PartConfiguration,Preferences.json,score.gpif,VERSION'); + expect(entries.map(e => e.data.length).join(',')).toEqual('0,19651,14,27,192,22998,3'); }); it('simple-roundtrip', () => { From 5eacb90b67b9eff4bcaa2d122f39d62da7729fd6 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 23:18:45 +0100 Subject: [PATCH 30/31] Better unsupport format handling for alphaTex --- src/importer/AlphaTexImporter.ts | 49 +++++++++++++++++--------- test/importer/AlphaTexImporter.test.ts | 23 ++++++++++++ 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/src/importer/AlphaTexImporter.ts b/src/importer/AlphaTexImporter.ts index 4138b6c46..bc129b790 100644 --- a/src/importer/AlphaTexImporter.ts +++ b/src/importer/AlphaTexImporter.ts @@ -145,7 +145,7 @@ export class AlphaTexImporter extends ScoreImporter { this.consolidate(); this._score.finish(this.settings); this._score.rebuildRepeatGroups(); - this._lyrics.forEach((lyrics, track)=>{ + this._lyrics.forEach((lyrics, track) => { this._score.tracks[track].applyLyrics(lyrics); }); return this._score; @@ -553,14 +553,17 @@ export class AlphaTexImporter extends ScoreImporter { } private score(): void { - if(this._sy === AlphaTexSymbols.Eof) { - this.errorMessage('Unexpected end of file'); + if (this._sy === AlphaTexSymbols.Eof) { + throw new UnsupportedFormatError('Unexpected end of file'); + } + const anyMetaRead = this.metaData(); + const anyBarsRead = this.bars(); + if (!anyMetaRead && !anyBarsRead) { + throw new UnsupportedFormatError('No alphaTex data found'); } - this.metaData(); - this.bars(); } - private metaData(): void { + private metaData(): boolean { let anyMeta: boolean = false; let continueReading: boolean = true; while (this._sy === AlphaTexSymbols.MetaCommand && continueReading) { @@ -667,6 +670,8 @@ export class AlphaTexImporter extends ScoreImporter { } else if (this._sy === AlphaTexSymbols.Dot) { this._sy = this.newSy(); } + + return anyMeta; } private handleStaffMeta(): boolean { @@ -858,8 +863,8 @@ export class AlphaTexImporter extends ScoreImporter { this._sy = this.newSy(); } - private bars(): void { - this.bar(); + private bars(): boolean { + let anyData = this.bar(); while (this._sy !== AlphaTexSymbols.Eof) { // read pipe from last bar if (this._sy === AlphaTexSymbols.Pipe) { @@ -871,10 +876,13 @@ export class AlphaTexImporter extends ScoreImporter { break; } } + return anyData; } - private trackStaffMeta(): void { + private trackStaffMeta(): boolean { + let anyMeta = false; if (this._sy === AlphaTexSymbols.MetaCommand) { + anyMeta = true; let syData: string = (this._syData as string).toLowerCase(); if (syData === 'track') { this._sy = this.newSy(); @@ -893,7 +901,7 @@ export class AlphaTexImporter extends ScoreImporter { this._sy = this.newSy(); } } - if(this._sy === AlphaTexSymbols.MetaCommand) { + if (this._sy === AlphaTexSymbols.MetaCommand) { syData = (this._syData as string).toLowerCase(); if (syData === 'staff') { this._sy = this.newSy(); @@ -906,6 +914,7 @@ export class AlphaTexImporter extends ScoreImporter { } } } + return anyMeta; } private staffProperties(): void { @@ -940,8 +949,8 @@ export class AlphaTexImporter extends ScoreImporter { this._sy = this.newSy(); } - private bar(): void { - this.trackStaffMeta(); + private bar(): boolean { + const anyStaffMeta = this.trackStaffMeta(); let bar: Bar = this.newBar(this._currentStaff); if (this._currentStaff.bars.length > this._score.masterBars.length) { let master: MasterBar = new MasterBar(); @@ -954,18 +963,23 @@ export class AlphaTexImporter extends ScoreImporter { master.tripletFeel = master.previousMasterBar!.tripletFeel; } } - this.barMeta(bar); + const anyBarMeta = this.barMeta(bar); + + let anyBeatData = false; let voice: Voice = bar.voices[0]; while (this._sy !== AlphaTexSymbols.Pipe && this._sy !== AlphaTexSymbols.Eof) { if (!this.beat(voice)) { break; } + anyBeatData = true; } if (voice.beats.length === 0) { let emptyBeat: Beat = new Beat(); emptyBeat.isEmpty = true; voice.addBeat(emptyBeat); } + + return anyStaffMeta || anyBarMeta || anyBeatData; } private newBar(staff: Staff): Bar { @@ -1369,7 +1383,7 @@ export class AlphaTexImporter extends ScoreImporter { case AlphaTexSymbols.String: isDead = (this._syData as string) === 'x'; isTie = (this._syData as string) === '-'; - + if (isTie || isDead) { fret = 0; } else { @@ -1655,9 +1669,11 @@ export class AlphaTexImporter extends ScoreImporter { } } - private barMeta(bar: Bar): void { + private barMeta(bar: Bar): boolean { + let anyMeta = false; let master: MasterBar = bar.masterBar; while (this._sy === AlphaTexSymbols.MetaCommand) { + anyMeta = true; let syData: string = (this._syData as string).toLowerCase(); if (syData === 'ts') { this._sy = this.newSy(); @@ -1760,12 +1776,13 @@ export class AlphaTexImporter extends ScoreImporter { } } - if(master.index === 0 && !master.tempoAutomation) { + if (master.index === 0 && !master.tempoAutomation) { let tempoAutomation: Automation = new Automation(); tempoAutomation.isLinear = false; tempoAutomation.type = AutomationType.Tempo; tempoAutomation.value = this._score.tempo; master.tempoAutomation = tempoAutomation; } + return anyMeta; } } diff --git a/test/importer/AlphaTexImporter.test.ts b/test/importer/AlphaTexImporter.test.ts index cc8a795c0..c8e7ae57c 100644 --- a/test/importer/AlphaTexImporter.test.ts +++ b/test/importer/AlphaTexImporter.test.ts @@ -1,5 +1,6 @@ import { StaveProfile } from '@src/DisplaySettings'; import { AlphaTexImporter } from '@src/importer/AlphaTexImporter'; +import { UnsupportedFormatError } from '@src/importer/UnsupportedFormatError'; import { Beat } from '@src/model/Beat'; import { Clef } from '@src/model/Clef'; import { CrescendoType } from '@src/model/CrescendoType'; @@ -850,4 +851,26 @@ describe('AlphaTexImporterTest', () => { expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isLeftHandTapped).toEqual(true); expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLeftHandTapped).toEqual(false); }); + + it('expect-invalid-format-xml', () => { + try { + parseTex(''); + fail('Expected error'); + } catch(e) { + if(!(e instanceof UnsupportedFormatError)) { + fail(`Expected UnsupportedFormatError got ${e}`); + } + } + }); + + it('expect-invalid-format-other-text', () => { + try { + parseTex('This is not an alphaTex file'); + fail('Expected error'); + } catch(e) { + if(!(e instanceof UnsupportedFormatError)) { + fail(`Expected UnsupportedFormatError got ${e}`); + } + } + }); }); From dac4645313328554f3bdc54b8676060f0d0dba28 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 30 Dec 2020 23:22:43 +0100 Subject: [PATCH 31/31] Add download button to playground --- playground-template/control-template.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/playground-template/control-template.html b/playground-template/control-template.html index b9748be2a..c169439ae 100644 --- a/playground-template/control-template.html +++ b/playground-template/control-template.html @@ -100,6 +100,9 @@ + + +