notations 0.0.42 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -378,7 +378,7 @@ var Jaaru = (function (_super) {
378
378
  y -= h2;
379
379
  y2 = y + h2;
380
380
  }
381
- return ["M " + x + " " + y, "Q " + x2 + " " + y + " " + x2 + " " + y2].join(" ");
381
+ return ["M ".concat(x, " ").concat(y), "Q ".concat(x2, " ").concat(y, " ").concat(x2, " ").concat(y2)].join(" ");
382
382
  };
383
383
  Jaaru.prototype.refreshMinSize = function () {
384
384
  return TSU.DOM.svgBBox(this.pathElem);
@@ -1 +1 @@
1
- {"version":3,"file":"embelishments.js","sourceRoot":"","sources":["../../../src/carnatic/embelishments.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Note } from \"../core\";\nimport { BeatView } from \"../layouts\";\nimport { AtomView, Embelishment } from \"../shapes\";\nimport { JaaruGamaka } from \"./gamakas\";\n\n/**\n * Embelishments specifically \"around\" a single atom view.\n */\nexport abstract class AtomViewEmbelishment extends Embelishment {\n constructor(public readonly atomView: AtomView) {\n super();\n }\n}\n\nexport class OctaveIndicator extends AtomViewEmbelishment {\n dotRadius = 1;\n dotSpacing = 2.5;\n dotsElem: SVGGElement;\n\n constructor(public readonly noteView: AtomView, public readonly note: Note) {\n super(noteView);\n const rootElem = this.noteView.embRoot();\n const numDots = Math.abs(note.octave);\n this.dotsElem = TSU.DOM.createSVGNode(\"g\", {\n doc: document,\n parent: rootElem,\n attrs: {\n width: this.dotRadius * 2 * numDots + (numDots - 1) * this.dotSpacing,\n height: this.dotRadius * 2,\n source: \"atom\" + this.noteView.flatAtom.atom.uuid,\n },\n });\n let cx = 0;\n for (let i = 0; i < numDots; i++) {\n TSU.DOM.createSVGNode(\"circle\", {\n doc: document,\n parent: this.dotsElem,\n attrs: {\n cx: cx,\n cy: 0,\n r: this.dotRadius,\n stroke: \"black\",\n \"stroke-width\": \"1\",\n },\n });\n cx += this.dotRadius + this.dotRadius + this.dotSpacing;\n }\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n const numDots = Math.abs(this.note.octave);\n return {\n width: this.dotRadius * 2 * numDots + (numDots - 1) * this.dotSpacing,\n height: this.dotRadius * 2,\n };\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n if (x == null) x = this.x;\n if (y == null) y = this.y;\n // cannot set w/h\n // this.bbox.x = x;\n // this.bbox.y = y;\n return [x, y, null, null];\n }\n\n refreshLayout(): void {\n this.dotsElem.setAttribute(\"transform\", \"translate(\" + this.x + \",\" + this.y + \")\");\n }\n}\n\n////////// Carnatic embelishments\nexport class LabelEmbelishment extends AtomViewEmbelishment {\n labelElem: SVGTextElement;\n constructor(public readonly label: string, public readonly atomView: AtomView) {\n super(atomView);\n const rootElem = this.atomView.embRoot();\n this.labelElem = TSU.DOM.createSVGNode(\"text\", {\n doc: document,\n parent: rootElem,\n text: label,\n attrs: {\n source: \"atom\" + this.atomView.flatAtom.atom.uuid,\n \"dominant-baseline\": \"hanging\",\n },\n });\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.labelElem);\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, y, w, h];\n }\n\n refreshLayout(): void {\n this.labelElem.setAttribute(\"x\", \"\" + this.x);\n this.labelElem.setAttribute(\"y\", \"\" + this.y);\n }\n}\n\nexport class BeatStartLines extends Embelishment {\n barSpacing = 10;\n protected line: SVGLineElement;\n\n constructor(public readonly source: BeatView, public readonly rootElement: SVGGraphicsElement) {\n super();\n this.line = TSU.DOM.createSVGNode(\"line\", {\n doc: document,\n parent: this.rootElement,\n attrs: {\n stroke: \"black\",\n \"stroke-width\": \"1\",\n class: \"bar-start-line\",\n },\n });\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return new TSU.Geom.Rect(0, 0, 0, 0);\n }\n\n refreshLayout(): void {\n const line = this.line;\n const x = -this.barSpacing;\n line.setAttribute(\"x1\", \"\" + x);\n line.setAttribute(\"x2\", \"\" + x);\n const y = 0;\n const h = this.source.height;\n line.setAttribute(\"y1\", \"\" + y);\n line.setAttribute(\"y2\", \"\" + (y + h));\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, y, null, h];\n }\n}\n\nexport class BeatEndLines extends Embelishment {\n lineSpacing = 2;\n protected lines: SVGLineElement[];\n\n constructor(public readonly source: BeatView, public readonly rootElement: SVGGraphicsElement, nLines = 1) {\n super();\n this.lines = [];\n for (let i = 0; i < nLines; i++) {\n this.lines.push(\n TSU.DOM.createSVGNode(\"line\", {\n doc: document,\n // parent: l2g,\n parent: this.rootElement,\n attrs: {\n stroke: \"black\",\n \"stroke-width\": \"1\",\n class: \"bar-end-line\",\n },\n }),\n );\n }\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return new TSU.Geom.Rect(0, 0, 0, 0);\n }\n\n protected updatePosition(x: null | number, y: null | number): [number | null, number | null] {\n return [x, y];\n }\n\n barSpacing = 15;\n\n refreshLayout(): void {\n const x = this.source.width + this.barSpacing;\n const y = 0;\n const h = this.source.height;\n let currX = x;\n for (const line of this.lines) {\n const lx = \"\" + currX;\n line.setAttribute(\"x1\", lx);\n line.setAttribute(\"x2\", lx);\n currX += 4;\n }\n for (const line of this.lines) {\n line.setAttribute(\"y1\", \"\" + y);\n line.setAttribute(\"y2\", \"\" + (y + h));\n }\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [null, null, null, null];\n }\n}\n\n/// Carnatic Embelishments\nexport class Kampitham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"~\", atomView);\n }\n}\n\nexport class Nokku extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"w\", atomView);\n }\n}\n\nexport class Prathyagatham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"∵\", atomView);\n }\n}\nexport class Spuritham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"∴\", atomView);\n }\n}\nexport class Raavi extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"^\", atomView);\n }\n}\nexport class Kandippu extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"✓\", atomView);\n }\n}\n\nexport class Vaali extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"⌒\", atomView);\n }\n}\nexport class Odukkal extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"x\", atomView);\n }\n}\nexport class Orikkai extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"γ\", atomView);\n }\n}\n\nexport class Jaaru extends AtomViewEmbelishment {\n pathElem: SVGPathElement;\n constructor(public readonly jaaru: JaaruGamaka, public readonly atomView: AtomView) {\n super(atomView);\n // TODO - Create the \"fancier\" view\n // for now represent this with just a slant line (like a slash)\n const rootElem = this.atomView.embRoot();\n this.pathElem = TSU.DOM.createSVGNode(\"path\", {\n doc: document,\n parent: rootElem,\n attrs: {\n source: \"atom\" + this.atomView.flatAtom.atom.uuid,\n stroke: \"black\",\n fill: \"transparent\",\n d: this.pathAttribute(),\n },\n });\n }\n\n pathAttribute(x = 0): string {\n const avbbox = this.atomView.minSize;\n let y2 = 0;\n const h2 = avbbox.height / 2;\n const x2 = x + h2;\n let y = this.atomView.y;\n if (this.jaaru.ascending) {\n y += avbbox.height;\n y2 = y - h2;\n } else {\n y -= h2;\n y2 = y + h2;\n }\n return [`M ${x} ${y}`, `Q ${x2} ${y} ${x2} ${y2}`].join(\" \");\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.pathElem);\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, null, null, null];\n }\n\n refreshLayout(): void {\n this.pathElem.setAttribute(\"d\", this.pathAttribute(this.x));\n }\n}\n"]}
1
+ {"version":3,"file":"embelishments.js","sourceRoot":"","sources":["../../../src/carnatic/embelishments.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Note } from \"../core\";\nimport { BeatView } from \"../layouts\";\nimport { AtomView, Embelishment } from \"../shapes\";\nimport { JaaruGamaka } from \"./gamakas\";\n\n/**\n * Embelishments specifically \"around\" a single atom view.\n */\nexport abstract class AtomViewEmbelishment extends Embelishment {\n constructor(public readonly atomView: AtomView) {\n super();\n }\n}\n\nexport class OctaveIndicator extends AtomViewEmbelishment {\n dotRadius = 1;\n dotSpacing = 2.5;\n dotsElem: SVGGElement;\n\n constructor(public readonly noteView: AtomView, public readonly note: Note) {\n super(noteView);\n const rootElem = this.noteView.embRoot();\n const numDots = Math.abs(note.octave);\n this.dotsElem = TSU.DOM.createSVGNode(\"g\", {\n doc: document,\n parent: rootElem,\n attrs: {\n width: this.dotRadius * 2 * numDots + (numDots - 1) * this.dotSpacing,\n height: this.dotRadius * 2,\n source: \"atom\" + this.noteView.flatAtom.atom.uuid,\n },\n });\n let cx = 0;\n for (let i = 0; i < numDots; i++) {\n TSU.DOM.createSVGNode(\"circle\", {\n doc: document,\n parent: this.dotsElem,\n attrs: {\n cx: cx,\n cy: 0,\n r: this.dotRadius,\n stroke: \"black\",\n \"stroke-width\": \"1\",\n },\n });\n cx += this.dotRadius + this.dotRadius + this.dotSpacing;\n }\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n const numDots = Math.abs(this.note.octave);\n return {\n width: this.dotRadius * 2 * numDots + (numDots - 1) * this.dotSpacing,\n height: this.dotRadius * 2,\n };\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n if (x == null) x = this.x;\n if (y == null) y = this.y;\n // cannot set w/h\n // this.bbox.x = x;\n // this.bbox.y = y;\n return [x, y, null, null];\n }\n\n refreshLayout(): void {\n this.dotsElem.setAttribute(\"transform\", \"translate(\" + this.x + \",\" + this.y + \")\");\n }\n}\n\n////////// Carnatic embelishments\nexport class LabelEmbelishment extends AtomViewEmbelishment {\n labelElem: SVGTextElement;\n constructor(public readonly label: string, public readonly atomView: AtomView) {\n super(atomView);\n const rootElem = this.atomView.embRoot();\n this.labelElem = TSU.DOM.createSVGNode(\"text\", {\n doc: document,\n parent: rootElem,\n text: label,\n attrs: {\n source: \"atom\" + this.atomView.flatAtom.atom.uuid,\n \"dominant-baseline\": \"hanging\",\n },\n });\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.labelElem);\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, y, w, h];\n }\n\n refreshLayout(): void {\n this.labelElem.setAttribute(\"x\", \"\" + this.x);\n this.labelElem.setAttribute(\"y\", \"\" + this.y);\n }\n}\n\nexport class BeatStartLines extends Embelishment {\n barSpacing = 10;\n protected line: SVGLineElement;\n\n constructor(public readonly source: BeatView, public readonly rootElement: SVGGraphicsElement) {\n super();\n this.line = TSU.DOM.createSVGNode(\"line\", {\n doc: document,\n parent: this.rootElement,\n attrs: {\n stroke: \"black\",\n \"stroke-width\": \"1\",\n class: \"bar-start-line\",\n },\n });\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return new TSU.Geom.Rect(0, 0, 0, 0);\n }\n\n refreshLayout(): void {\n const line = this.line;\n const x = -this.barSpacing;\n line.setAttribute(\"x1\", \"\" + x);\n line.setAttribute(\"x2\", \"\" + x);\n const y = 0;\n const h = this.source.height;\n line.setAttribute(\"y1\", \"\" + y);\n line.setAttribute(\"y2\", \"\" + (y + h));\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, y, null, h];\n }\n}\n\nexport class BeatEndLines extends Embelishment {\n lineSpacing = 2;\n protected lines: SVGLineElement[];\n\n constructor(public readonly source: BeatView, public readonly rootElement: SVGGraphicsElement, nLines = 1) {\n super();\n this.lines = [];\n for (let i = 0; i < nLines; i++) {\n this.lines.push(\n TSU.DOM.createSVGNode(\"line\", {\n doc: document,\n // parent: l2g,\n parent: this.rootElement,\n attrs: {\n stroke: \"black\",\n \"stroke-width\": \"1\",\n class: \"bar-end-line\",\n },\n }),\n );\n }\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return new TSU.Geom.Rect(0, 0, 0, 0);\n }\n\n protected updatePosition(x: null | number, y: null | number): [number | null, number | null] {\n return [x, y];\n }\n\n barSpacing = 15;\n\n refreshLayout(): void {\n const x = this.source.width + this.barSpacing;\n const y = 0;\n const h = this.source.height;\n let currX = x;\n for (const line of this.lines) {\n const lx = \"\" + currX;\n line.setAttribute(\"x1\", lx);\n line.setAttribute(\"x2\", lx);\n currX += 4;\n }\n for (const line of this.lines) {\n line.setAttribute(\"y1\", \"\" + y);\n line.setAttribute(\"y2\", \"\" + (y + h));\n }\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [null, null, null, null];\n }\n}\n\n/// Carnatic Embelishments\nexport class Kampitham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"~\", atomView);\n }\n}\n\nexport class Nokku extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"w\", atomView);\n }\n}\n\nexport class Prathyagatham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"∵\", atomView);\n }\n}\nexport class Spuritham extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"∴\", atomView);\n }\n}\nexport class Raavi extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"^\", atomView);\n }\n}\nexport class Kandippu extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"✓\", atomView);\n }\n}\n\nexport class Vaali extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"⌒\", atomView);\n }\n}\nexport class Odukkal extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"x\", atomView);\n }\n}\nexport class Orikkai extends LabelEmbelishment {\n constructor(public readonly atomView: AtomView) {\n super(\"γ\", atomView);\n }\n}\n\nexport class Jaaru extends AtomViewEmbelishment {\n pathElem: SVGPathElement;\n constructor(public readonly jaaru: JaaruGamaka, public readonly atomView: AtomView) {\n super(atomView);\n // TODO - Create the \"fancier\" view\n // for now represent this with just a slant line (like a slash)\n const rootElem = this.atomView.embRoot();\n this.pathElem = TSU.DOM.createSVGNode(\"path\", {\n doc: document,\n parent: rootElem,\n attrs: {\n source: \"atom\" + this.atomView.flatAtom.atom.uuid,\n stroke: \"black\",\n fill: \"transparent\",\n d: this.pathAttribute(),\n },\n });\n }\n\n pathAttribute(x = 0): string {\n const avbbox = this.atomView.minSize;\n let y2 = 0;\n const h2 = avbbox.height / 2;\n const x2 = x + h2;\n let y = this.atomView.y;\n if (this.jaaru.ascending) {\n y += avbbox.height;\n y2 = y - h2;\n } else {\n y -= h2;\n y2 = y + h2;\n }\n return [`M ${x} ${y}`, `Q ${x2} ${y} ${x2} ${y2}`].join(\" \");\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.pathElem);\n }\n\n protected updateBounds(\n x: null | number,\n y: null | number,\n w: null | number,\n h: null | number,\n ): [number | null, number | null, number | null, number | null] {\n return [x, null, null, null];\n }\n\n refreshLayout(): void {\n this.pathElem.setAttribute(\"d\", this.pathAttribute(this.x));\n }\n}\n"]}
package/lib/cjs/core.js CHANGED
@@ -201,7 +201,7 @@ var Entity = (function () {
201
201
  configurable: true
202
202
  });
203
203
  Entity.prototype.toString = function () {
204
- return "Entity(id = " + this.uuid + ")";
204
+ return "Entity(id = ".concat(this.uuid, ")");
205
205
  };
206
206
  Entity.prototype.equals = function (another, expect) {
207
207
  if (expect === void 0) { expect = false; }
@@ -312,7 +312,7 @@ var Space = (function (_super) {
312
312
  return __assign(__assign({}, _super.prototype.debugValue.call(this)), { isSilent: this.isSilent });
313
313
  };
314
314
  Space.prototype.toString = function () {
315
- return "Space(" + this.duration + "-" + this.isSilent + ")";
315
+ return "Space(".concat(this.duration, "-").concat(this.isSilent, ")");
316
316
  };
317
317
  Space.prototype.copyTo = function (another) {
318
318
  _super.prototype.copyTo.call(this, another);
@@ -341,7 +341,7 @@ var Literal = (function (_super) {
341
341
  return out;
342
342
  };
343
343
  Literal.prototype.toString = function () {
344
- return "Lit(" + this.duration + "-" + this.value + ")";
344
+ return "Lit(".concat(this.duration, "-").concat(this.value, ")");
345
345
  };
346
346
  Literal.prototype.equals = function (another) {
347
347
  return _super.prototype.equals.call(this, another) && this.value == another.value;
@@ -366,7 +366,7 @@ var Syllable = (function (_super) {
366
366
  return out;
367
367
  };
368
368
  Syllable.prototype.toString = function () {
369
- return "Syll(" + this.duration + "-" + this.value + ")";
369
+ return "Syll(".concat(this.duration, "-").concat(this.value, ")");
370
370
  };
371
371
  return Syllable;
372
372
  }(Literal));
@@ -400,7 +400,7 @@ var Note = (function (_super) {
400
400
  return out;
401
401
  };
402
402
  Note.prototype.toString = function () {
403
- return "Note(" + this.duration + "-" + this.value + "-" + this.octave + ")";
403
+ return "Note(".concat(this.duration, "-").concat(this.value, "-").concat(this.octave, ")");
404
404
  };
405
405
  Note.prototype.equals = function (another) {
406
406
  return _super.prototype.equals.call(this, another) && this.octave == another.octave && this.shift == another.shift;
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\n\ntype Fraction = TSU.Num.Fraction;\nconst ZERO = TSU.Num.Fraction.ZERO;\nconst ONE = TSU.Num.Fraction.ONE;\n\nexport class Entity {\n private static counter = 0;\n readonly uuid = Entity.counter++;\n metadata: TSU.StringMap<any>;\n parent: TSU.Nullable<Entity> = null;\n\n constructor(config: any = null) {\n config = config || {};\n this.metadata = config.metadata || {};\n }\n\n debugValue(): any {\n if (Object.keys(this.metadata).length > 0) return { metadata: this.metadata, type: this.type };\n else return { type: this.type };\n }\n\n children(): Entity[] {\n return [];\n }\n\n get childCount(): number {\n return this.children().length;\n }\n\n addChild(child: Entity, index = -1): this {\n if (index < 0) {\n this.children().push(child);\n } else {\n this.children().splice(index, 0, child);\n }\n return this;\n }\n\n childAt(index: number): Entity {\n return this.children()[index];\n }\n\n indexOfChild(entity: Entity): number {\n let i = 0;\n for (const child of this.children()) {\n if (child == entity) return i;\n i++;\n }\n return -1;\n }\n\n removeChildAt(index: number): Entity {\n const children = this.children();\n const out = children[index];\n children.splice(index, 1);\n return out;\n }\n\n setChildAt(index: number, entity: Entity): this {\n this.children()[index] = entity;\n return this;\n }\n\n setMetadata(key: string, value: any): this {\n this.metadata[key] = value;\n return this;\n }\n\n getMetadata(key: string, recurse = true): any {\n if (key in this.metadata) {\n return this.metadata[key];\n }\n if (recurse && this.parent) {\n return this.parent.getMetadata(key);\n }\n return null;\n }\n\n /**\n * Returns the type of this Entity.\n */\n get type(): unknown {\n return this.constructor.name;\n }\n\n toString(): string {\n return `Entity(id = ${this.uuid})`;\n }\n\n equals(another: this, expect = false): boolean {\n if (this.type != another.type) return false;\n // check metadata too\n return true;\n }\n\n clone(): this {\n const out = this.newInstance();\n this.copyTo(out);\n return out;\n }\n\n copyTo(another: this): void {\n another.metadata = { ...this.metadata };\n }\n\n protected newInstance(): this {\n return new (this.constructor as any)();\n }\n}\n\nexport abstract class TimedEntity extends Entity {\n // Duration of this entity in beats.\n // By default entities durations are readonly\n abstract get duration(): Fraction;\n\n equals(another: this): boolean {\n return super.equals(another) && this.duration.equals(another.duration);\n }\n}\n\nexport enum AtomType {\n NOTE = \"Note\",\n LITERAL = \"Literal\",\n SYLLABLE = \"Syllable\",\n SPACE = \"Space\",\n GROUP = \"Group\",\n LABEL = \"Label\",\n REST = \"Rest\",\n}\n\nexport abstract class Atom extends TimedEntity {\n protected _duration: Fraction;\n nextSibling: TSU.Nullable<Atom> = null;\n prevSibling: TSU.Nullable<Atom> = null;\n\n constructor(duration = ONE) {\n super();\n this._duration = duration || ONE;\n }\n\n debugValue(): any {\n return this.duration.isOne\n ? super.debugValue()\n : { ...super.debugValue(), duration: this.duration.factorized.toString() };\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.duration = new TSU.Num.Fraction(this.duration.num, this.duration.den);\n }\n\n get duration(): Fraction {\n return this._duration;\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n}\n\nexport abstract class LeafAtom extends Atom {\n // Tells if this atom is followed by a rest\n beforeRest = false;\n\n debugValue(): any {\n return this.beforeRest ? { ...super.debugValue(), beforeRest: true } : super.debugValue();\n }\n}\n\nexport class Rest extends LeafAtom {\n // rests are zero length - why not just use 0 length silent spaces?\n constructor() {\n super(ZERO);\n }\n}\n\n/**\n * Spaces are used to denote either silence or continuations of previous notes.\n */\nexport class Space extends LeafAtom {\n /**\n * Tells if this is a silent space or a continuation of previous note.\n */\n isSilent = false;\n\n constructor(duration = ONE, isSilent = false) {\n super(duration);\n this.isSilent = isSilent;\n }\n\n debugValue(): any {\n return { ...super.debugValue(), isSilent: this.isSilent };\n }\n\n toString(): string {\n return `Space(${this.duration}-${this.isSilent})`;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.isSilent = this.isSilent;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.isSilent == another.isSilent;\n }\n}\n\nexport class Literal extends LeafAtom {\n /**\n * The value of this Syllable.\n */\n embelishments: any[] = [];\n\n constructor(public value: string, duration = ONE) {\n super(duration);\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), value: this.value };\n if (this.embelishments.length > 0) {\n out.embs = this.embelishments.map((e) => (\"debugValue\" in e ? e.debugValue() : e));\n }\n return out;\n }\n\n toString(): string {\n return `Lit(${this.duration}-${this.value})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.value == another.value;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.value = this.value;\n }\n}\n\nexport class Syllable extends Literal {\n static fromLit(lit: Literal): Syllable {\n if (lit.type == AtomType.SYLLABLE) return lit as Syllable;\n const out = new Syllable(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n toString(): string {\n return `Syll(${this.duration}-${this.value})`;\n }\n}\n\nexport class Note extends Literal {\n /**\n * Which octave is the note in. Can be +ve or -ve to indicate higher or lower octaves.\n */\n octave = 0;\n\n /**\n * How is the note shifted - ie by shifted towards major or minore by # of semi-tones.\n */\n shift: number | boolean = 0;\n\n constructor(value: string, duration = ONE, octave = 0, shift = 0) {\n super(value, duration);\n this.octave = octave;\n this.shift = shift;\n }\n\n static fromLit(lit: Literal): Note {\n if (lit.type == AtomType.NOTE) return lit as Note;\n const out = new Note(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue() };\n if (this.octave != 0) out.octave = this.octave;\n if (this.shift != 0) out.shift = this.shift;\n return out;\n }\n\n toString(): string {\n return `Note(${this.duration}-${this.value}-${this.octave})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.octave == another.octave && this.shift == another.shift;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.octave = this.octave;\n another.shift = this.shift;\n }\n}\n\nexport class Group extends Atom {\n /**\n * This indicates whether our duration is static or linear to number of\n * atoms in this group.\n */\n durationIsMultiplier = false;\n readonly atoms: TSU.Lists.ValueList<Atom> = new TSU.Lists.ValueList<Atom>();\n\n constructor(duration = ONE, ...atoms: Atom[]) {\n super(duration);\n this.addAtoms(...atoms);\n }\n\n get duration(): Fraction {\n if (this.durationIsMultiplier) {\n return this.totalChildDuration.divby(this._duration);\n } else {\n return this._duration;\n }\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), atoms: Array.from(this.atoms.values(), (a) => a.debugValue()) };\n if (this.durationIsMultiplier) out.durationIsMultiplier = true;\n return out;\n }\n\n get totalChildDuration(): Fraction {\n let out = ZERO;\n this.atoms.forEach((atom) => (out = out.plus(atom.duration)));\n return out;\n }\n\n /** Entities can have children and thus siblings and parents. */\n equals(another: this, expect = false): boolean {\n if (!super.equals(another)) return false;\n return this.atoms.equals(another.atoms, (a1, a2) => a1.equals(a2));\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n this.atoms.forEach((atom) => another.atoms.add(atom.clone()));\n }\n\n addAtoms(...atoms: Atom[]): this {\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n const last = this.atoms.last;\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n atom.parent = this;\n this.atoms.add(atom);\n }\n }\n return this;\n }\n}\n\nexport type CyclePosition = [number, number, number];\nexport type CycleIterator = Generator<[CyclePosition, Fraction]>;\n\nexport class CycleCursor {\n constructor(public readonly cycle: Cycle, public barIndex = 0, public beatIndex = 0, public instance = 0) {}\n\n get next(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n this.instance++;\n if (!currBar.beatCounts[this.beatIndex] || this.instance >= currBar.beatCounts[this.beatIndex]) {\n this.instance = 0;\n this.beatIndex++;\n if (this.beatIndex >= currBar.beatLengths.length) {\n this.beatIndex = 0;\n this.barIndex++;\n if (this.barIndex >= this.cycle.bars.length) {\n this.barIndex = 0;\n }\n }\n }\n return result;\n }\n\n get prev(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n // TODO - result should be set *after* decrementing if we had already\n // done a \"next\" before this otherwise user may have to do a prev twice\n this.instance--;\n if (this.instance < 0) {\n this.beatIndex--;\n if (this.beatIndex < 0) {\n this.barIndex--;\n if (this.barIndex < 0) {\n this.barIndex = this.cycle.bars.length - 1;\n }\n this.beatIndex = this.cycle.bars[this.barIndex].beatCount - 1;\n }\n this.instance = (this.cycle.bars[this.barIndex].beatCounts[this.beatIndex] || 1) - 1;\n }\n return result;\n }\n}\n\nexport class Bar extends TimedEntity {\n name: string;\n // Length/Duration of each beat.\n beatLengths: Fraction[] = [];\n\n // How many times should a beat be repeated - the Kalai!\n beatCounts: number[] = [];\n\n constructor(config: any = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n for (const bl of config.beatLengths || []) {\n if (typeof bl === \"number\") {\n this.beatLengths.push(TSU.Num.Frac(bl));\n } else {\n this.beatLengths.push(bl);\n }\n }\n for (const bc of config.beatCounts || []) {\n this.beatCounts.push(bc);\n }\n while (this.beatCounts.length < this.beatLengths.length) {\n this.beatCounts.push(1);\n }\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, beatLengths: this.beatLengths };\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) return false;\n if (this.beatLengths.length != another.beatLengths.length) return false;\n if (this.beatCounts.length != another.beatCounts.length) return false;\n for (let i = 0; i < this.beatLengths.length; i++) {\n if (!this.beatLengths[i].equals(another.beatLengths[i])) return false;\n }\n for (let i = 0; i < this.beatCounts.length; i++) {\n if (this.beatCounts[i] != another.beatCounts[i]) return false;\n }\n return true;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.beatLengths = [...this.beatLengths];\n another.beatCounts = [...this.beatCounts];\n }\n\n get beatCount(): number {\n return this.beatLengths.length;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (let i = 0; i < this.beatLengths.length; i++) {\n out += this.beatCounts[i] || 1;\n }\n return out;\n }\n\n /**\n * Total duration (of time) across all beats in this bar.\n */\n get duration(): Fraction {\n let total = ZERO;\n for (let i = 0; i < this.beatLengths.length; i++) {\n total = total.plus(this.beatLengths[i].timesNum(this.beatCounts[i] || 1));\n }\n return total;\n }\n}\n\n// Describes the cycle pattern\nexport class Cycle extends TimedEntity {\n name: string;\n bars: Bar[];\n\n static readonly DEFAULT = new Cycle({\n name: \"Adi Thalam\",\n bars: [\n new Bar({ name: \"Laghu\", beatLengths: [1, 1, 1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n ],\n });\n\n constructor(config: null | { name?: string; bars?: Bar[] } = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n this.bars = config.bars || [];\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, bars: this.bars.map((p) => p.debugValue()) };\n }\n\n children(): Entity[] {\n return this.bars;\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) {\n return false;\n }\n if (this.bars.length != another.bars.length) return false;\n for (let i = 0; i < this.bars.length; i++) {\n if (!this.bars[i].equals(another.bars[i])) return false;\n }\n return true;\n }\n\n /**\n * Given a global beat index returns four values [cycle,bar,beat,instance] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global beat\n * index can be greater the number of beats in this cycle this\n * allows us to wrap around. Similarly if beatindex is less than\n * 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the\n * offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - Offset of the beat at this global index.\n */\n getAtIndex(globalIndex: number): [number, CyclePosition, Fraction] {\n let cycle = 0;\n while (globalIndex < 0) {\n globalIndex += this.totalBeatCount;\n cycle--;\n }\n if (globalIndex >= this.totalBeatCount) {\n cycle = Math.floor(globalIndex / this.totalBeatCount);\n }\n globalIndex = globalIndex % this.totalBeatCount;\n let offset = ZERO;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n if (globalIndex >= bar.totalBeatCount) {\n globalIndex -= bar.totalBeatCount;\n offset = offset.plus(bar.duration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n if (globalIndex >= beatCount) {\n globalIndex -= beatCount;\n offset = offset.plus(beatLength.timesNum(beatCount));\n } else {\n // this is it\n const instance = globalIndex;\n return [cycle, [barIndex, beatIndex, instance], offset.plus(beatLength.timesNum(instance))];\n }\n }\n }\n }\n throw new Error(\"Should not be here!\");\n }\n\n /**\n * Given a global offset returns five values [cycle, bar,beat,instance,offset] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global offset can be\n * greater the duration of the cycle this allows us to wrap around.\n * Similarly if globalOffset is less than 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - The note offset within the beat where the global offset lies.\n * globalIndex - The beat index within the entire cycle and not just within the bar.\n */\n getPosition(globalOffset: Fraction): [number, CyclePosition, Fraction, number] {\n const duration = this.duration;\n let cycleNum = 0;\n if (globalOffset.isLT(ZERO)) {\n while (globalOffset.isLT(ZERO)) {\n cycleNum--;\n globalOffset = globalOffset.plus(duration);\n }\n } else if (globalOffset.isGTE(duration)) {\n const realOffset = globalOffset.mod(duration);\n globalOffset = globalOffset.minus(realOffset).divby(duration);\n TSU.assert(globalOffset.isWhole);\n cycleNum = globalOffset.floor;\n globalOffset = realOffset;\n }\n\n // here globalOffset is positive and >= 0 and < this.duration\n let globalIndex = 0;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n const barDuration = bar.duration;\n if (globalOffset.isGTE(barDuration)) {\n globalOffset = globalOffset.minus(barDuration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n for (let instance = 0; instance < beatCount; instance++, globalIndex++) {\n if (globalOffset.isGTE(beatLength)) {\n globalOffset = globalOffset.minus(beatLength);\n } else {\n // this is it\n return [cycleNum, [barIndex, beatIndex, instance], globalOffset, globalIndex];\n }\n }\n }\n }\n globalIndex += bar.totalBeatCount;\n }\n\n throw new Error(\"Should not be here!\");\n }\n\n *iterateBeats(startBar = 0, startBeat = 0, startInstance = 0): CycleIterator {\n let barIndex = startBar;\n let beatIndex = startBeat;\n let instanceIndex = startInstance;\n while (true) {\n const currBar = this.bars[barIndex];\n yield [[barIndex, beatIndex, instanceIndex], currBar.beatLengths[beatIndex]];\n instanceIndex++;\n if (!currBar.beatCounts[beatIndex] || instanceIndex >= currBar.beatCounts[beatIndex]) {\n instanceIndex = 0;\n beatIndex++;\n if (beatIndex >= currBar.beatLengths.length) {\n beatIndex = 0;\n barIndex++;\n if (barIndex >= this.bars.length) {\n barIndex = 0;\n }\n }\n }\n }\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.bars = this.bars.map((x) => x.clone());\n }\n\n get beatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.beatCount;\n return out;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.totalBeatCount;\n return out;\n }\n\n /**\n * Total duration (of time) across all bars in this cycle.\n */\n get duration(): Fraction {\n return this.bars.reduce((x, y) => x.plus(y.duration), ZERO);\n }\n}\n\nexport class Line extends Entity {\n // Line can have atoms starting \"before\" the cycle. The offset tells how many notes\n // before or after the cycle this line's atoms start at.\n offset: Fraction = ZERO;\n roles: Role[] = [];\n\n // This is a very hacky solution to doing left side pre-margin text typically found\n // in notations - eg line X of a pallavi has this. This makes vertical space less wasteful\n // A better solution is inter-beat annotation but it is very complex and ambiguous for now\n marginText = \"\";\n\n get isEmpty(): boolean {\n for (const r of this.roles) if (!r.isEmpty) return false;\n return true;\n }\n\n debugValue(): any {\n const out = {\n ...super.debugValue(),\n roles: this.roles.map((r) => r.debugValue()),\n // layoutParams: this.layoutParams?.uuid,\n };\n if (!this.offset.isZero) {\n out.offset = this.offset.toString();\n }\n return out;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.roles = this.roles.map((r) => r.clone());\n }\n\n addAtoms(roleName: string, defaultToNotes: boolean, ...atoms: Atom[]): this {\n const role = this.ensureRole(roleName, defaultToNotes);\n role.addAtoms(...atoms);\n return this;\n }\n\n ensureRole(roleName: string, defaultToNotes: boolean): Role {\n // Ensure we have this many roles\n let ri = this.roles.findIndex((r) => r.name == roleName);\n if (ri < 0) {\n ri = this.roles.length;\n const role = new Role(this, roleName);\n role.defaultToNotes = defaultToNotes;\n this.roles.push(role);\n }\n return this.roles[ri];\n }\n\n /**\n * Returns the maximum duration of all roles in this line.\n */\n get duration(): Fraction {\n let max = ZERO;\n for (const role of this.roles) {\n max = TSU.Num.Fraction.max(role.duration, max);\n }\n return max;\n }\n}\n\nexport class Role extends Entity {\n defaultToNotes = true;\n atoms: Atom[] = [];\n\n constructor(public readonly line: Line, public readonly name: string) {\n super();\n }\n\n get isEmpty(): boolean {\n return this.atoms.length == 0;\n }\n\n debugValue(): any {\n return { name: this.name, atoms: this.atoms.map((a) => a.debugValue()) };\n }\n\n addAtoms(...atoms: Atom[]): void {\n let last: null | Atom = null;\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n this.atoms.push(atom);\n }\n last = atom;\n }\n }\n\n copyTo(another: Role): void {\n another.addAtoms(...this.atoms);\n }\n\n /**\n * Duration for this role.\n */\n get duration(): Fraction {\n return this.atoms.reduce((a, b) => a.plus(b.duration), ZERO);\n }\n}\n"]}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\n\ntype Fraction = TSU.Num.Fraction;\nconst ZERO = TSU.Num.Fraction.ZERO;\nconst ONE = TSU.Num.Fraction.ONE;\n\nexport class Entity {\n private static counter = 0;\n readonly uuid = Entity.counter++;\n metadata: TSU.StringMap<any>;\n parent: TSU.Nullable<Entity> = null;\n\n constructor(config: any = null) {\n config = config || {};\n this.metadata = config.metadata || {};\n }\n\n debugValue(): any {\n if (Object.keys(this.metadata).length > 0) return { metadata: this.metadata, type: this.type };\n else return { type: this.type };\n }\n\n children(): Entity[] {\n return [];\n }\n\n get childCount(): number {\n return this.children().length;\n }\n\n addChild(child: Entity, index = -1): this {\n if (index < 0) {\n this.children().push(child);\n } else {\n this.children().splice(index, 0, child);\n }\n return this;\n }\n\n childAt(index: number): Entity {\n return this.children()[index];\n }\n\n indexOfChild(entity: Entity): number {\n let i = 0;\n for (const child of this.children()) {\n if (child == entity) return i;\n i++;\n }\n return -1;\n }\n\n removeChildAt(index: number): Entity {\n const children = this.children();\n const out = children[index];\n children.splice(index, 1);\n return out;\n }\n\n setChildAt(index: number, entity: Entity): this {\n this.children()[index] = entity;\n return this;\n }\n\n setMetadata(key: string, value: any): this {\n this.metadata[key] = value;\n return this;\n }\n\n getMetadata(key: string, recurse = true): any {\n if (key in this.metadata) {\n return this.metadata[key];\n }\n if (recurse && this.parent) {\n return this.parent.getMetadata(key);\n }\n return null;\n }\n\n /**\n * Returns the type of this Entity.\n */\n get type(): unknown {\n return this.constructor.name;\n }\n\n toString(): string {\n return `Entity(id = ${this.uuid})`;\n }\n\n equals(another: this, expect = false): boolean {\n if (this.type != another.type) return false;\n // check metadata too\n return true;\n }\n\n clone(): this {\n const out = this.newInstance();\n this.copyTo(out);\n return out;\n }\n\n copyTo(another: this): void {\n another.metadata = { ...this.metadata };\n }\n\n protected newInstance(): this {\n return new (this.constructor as any)();\n }\n}\n\nexport abstract class TimedEntity extends Entity {\n // Duration of this entity in beats.\n // By default entities durations are readonly\n abstract get duration(): Fraction;\n\n equals(another: this): boolean {\n return super.equals(another) && this.duration.equals(another.duration);\n }\n}\n\nexport enum AtomType {\n NOTE = \"Note\",\n LITERAL = \"Literal\",\n SYLLABLE = \"Syllable\",\n SPACE = \"Space\",\n GROUP = \"Group\",\n LABEL = \"Label\",\n REST = \"Rest\",\n}\n\nexport abstract class Atom extends TimedEntity {\n protected _duration: Fraction;\n nextSibling: TSU.Nullable<Atom> = null;\n prevSibling: TSU.Nullable<Atom> = null;\n\n constructor(duration = ONE) {\n super();\n this._duration = duration || ONE;\n }\n\n debugValue(): any {\n return this.duration.isOne\n ? super.debugValue()\n : { ...super.debugValue(), duration: this.duration.factorized.toString() };\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.duration = new TSU.Num.Fraction(this.duration.num, this.duration.den);\n }\n\n get duration(): Fraction {\n return this._duration;\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n}\n\nexport abstract class LeafAtom extends Atom {\n // Tells if this atom is followed by a rest\n beforeRest = false;\n\n debugValue(): any {\n return this.beforeRest ? { ...super.debugValue(), beforeRest: true } : super.debugValue();\n }\n}\n\nexport class Rest extends LeafAtom {\n // rests are zero length - why not just use 0 length silent spaces?\n constructor() {\n super(ZERO);\n }\n}\n\n/**\n * Spaces are used to denote either silence or continuations of previous notes.\n */\nexport class Space extends LeafAtom {\n /**\n * Tells if this is a silent space or a continuation of previous note.\n */\n isSilent = false;\n\n constructor(duration = ONE, isSilent = false) {\n super(duration);\n this.isSilent = isSilent;\n }\n\n debugValue(): any {\n return { ...super.debugValue(), isSilent: this.isSilent };\n }\n\n toString(): string {\n return `Space(${this.duration}-${this.isSilent})`;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.isSilent = this.isSilent;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.isSilent == another.isSilent;\n }\n}\n\nexport class Literal extends LeafAtom {\n /**\n * The value of this Syllable.\n */\n embelishments: any[] = [];\n\n constructor(public value: string, duration = ONE) {\n super(duration);\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), value: this.value };\n if (this.embelishments.length > 0) {\n out.embs = this.embelishments.map((e) => (\"debugValue\" in e ? e.debugValue() : e));\n }\n return out;\n }\n\n toString(): string {\n return `Lit(${this.duration}-${this.value})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.value == another.value;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.value = this.value;\n }\n}\n\nexport class Syllable extends Literal {\n static fromLit(lit: Literal): Syllable {\n if (lit.type == AtomType.SYLLABLE) return lit as Syllable;\n const out = new Syllable(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n toString(): string {\n return `Syll(${this.duration}-${this.value})`;\n }\n}\n\nexport class Note extends Literal {\n /**\n * Which octave is the note in. Can be +ve or -ve to indicate higher or lower octaves.\n */\n octave = 0;\n\n /**\n * How is the note shifted - ie by shifted towards major or minore by # of semi-tones.\n */\n shift: number | boolean = 0;\n\n constructor(value: string, duration = ONE, octave = 0, shift = 0) {\n super(value, duration);\n this.octave = octave;\n this.shift = shift;\n }\n\n static fromLit(lit: Literal): Note {\n if (lit.type == AtomType.NOTE) return lit as Note;\n const out = new Note(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue() };\n if (this.octave != 0) out.octave = this.octave;\n if (this.shift != 0) out.shift = this.shift;\n return out;\n }\n\n toString(): string {\n return `Note(${this.duration}-${this.value}-${this.octave})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.octave == another.octave && this.shift == another.shift;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.octave = this.octave;\n another.shift = this.shift;\n }\n}\n\nexport class Group extends Atom {\n /**\n * This indicates whether our duration is static or linear to number of\n * atoms in this group.\n */\n durationIsMultiplier = false;\n readonly atoms: TSU.Lists.ValueList<Atom> = new TSU.Lists.ValueList<Atom>();\n\n constructor(duration = ONE, ...atoms: Atom[]) {\n super(duration);\n this.addAtoms(...atoms);\n }\n\n get duration(): Fraction {\n if (this.durationIsMultiplier) {\n return this.totalChildDuration.divby(this._duration);\n } else {\n return this._duration;\n }\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), atoms: Array.from(this.atoms.values(), (a) => a.debugValue()) };\n if (this.durationIsMultiplier) out.durationIsMultiplier = true;\n return out;\n }\n\n get totalChildDuration(): Fraction {\n let out = ZERO;\n this.atoms.forEach((atom) => (out = out.plus(atom.duration)));\n return out;\n }\n\n /** Entities can have children and thus siblings and parents. */\n equals(another: this, expect = false): boolean {\n if (!super.equals(another)) return false;\n return this.atoms.equals(another.atoms, (a1, a2) => a1.equals(a2));\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n this.atoms.forEach((atom) => another.atoms.add(atom.clone()));\n }\n\n addAtoms(...atoms: Atom[]): this {\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n const last = this.atoms.last;\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n atom.parent = this;\n this.atoms.add(atom);\n }\n }\n return this;\n }\n}\n\nexport type CyclePosition = [number, number, number];\nexport type CycleIterator = Generator<[CyclePosition, Fraction]>;\n\nexport class CycleCursor {\n constructor(public readonly cycle: Cycle, public barIndex = 0, public beatIndex = 0, public instance = 0) {}\n\n get next(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n this.instance++;\n if (!currBar.beatCounts[this.beatIndex] || this.instance >= currBar.beatCounts[this.beatIndex]) {\n this.instance = 0;\n this.beatIndex++;\n if (this.beatIndex >= currBar.beatLengths.length) {\n this.beatIndex = 0;\n this.barIndex++;\n if (this.barIndex >= this.cycle.bars.length) {\n this.barIndex = 0;\n }\n }\n }\n return result;\n }\n\n get prev(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n // TODO - result should be set *after* decrementing if we had already\n // done a \"next\" before this otherwise user may have to do a prev twice\n this.instance--;\n if (this.instance < 0) {\n this.beatIndex--;\n if (this.beatIndex < 0) {\n this.barIndex--;\n if (this.barIndex < 0) {\n this.barIndex = this.cycle.bars.length - 1;\n }\n this.beatIndex = this.cycle.bars[this.barIndex].beatCount - 1;\n }\n this.instance = (this.cycle.bars[this.barIndex].beatCounts[this.beatIndex] || 1) - 1;\n }\n return result;\n }\n}\n\nexport class Bar extends TimedEntity {\n name: string;\n // Length/Duration of each beat.\n beatLengths: Fraction[] = [];\n\n // How many times should a beat be repeated - the Kalai!\n beatCounts: number[] = [];\n\n constructor(config: any = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n for (const bl of config.beatLengths || []) {\n if (typeof bl === \"number\") {\n this.beatLengths.push(TSU.Num.Frac(bl));\n } else {\n this.beatLengths.push(bl);\n }\n }\n for (const bc of config.beatCounts || []) {\n this.beatCounts.push(bc);\n }\n while (this.beatCounts.length < this.beatLengths.length) {\n this.beatCounts.push(1);\n }\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, beatLengths: this.beatLengths };\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) return false;\n if (this.beatLengths.length != another.beatLengths.length) return false;\n if (this.beatCounts.length != another.beatCounts.length) return false;\n for (let i = 0; i < this.beatLengths.length; i++) {\n if (!this.beatLengths[i].equals(another.beatLengths[i])) return false;\n }\n for (let i = 0; i < this.beatCounts.length; i++) {\n if (this.beatCounts[i] != another.beatCounts[i]) return false;\n }\n return true;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.beatLengths = [...this.beatLengths];\n another.beatCounts = [...this.beatCounts];\n }\n\n get beatCount(): number {\n return this.beatLengths.length;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (let i = 0; i < this.beatLengths.length; i++) {\n out += this.beatCounts[i] || 1;\n }\n return out;\n }\n\n /**\n * Total duration (of time) across all beats in this bar.\n */\n get duration(): Fraction {\n let total = ZERO;\n for (let i = 0; i < this.beatLengths.length; i++) {\n total = total.plus(this.beatLengths[i].timesNum(this.beatCounts[i] || 1));\n }\n return total;\n }\n}\n\n// Describes the cycle pattern\nexport class Cycle extends TimedEntity {\n name: string;\n bars: Bar[];\n\n static readonly DEFAULT = new Cycle({\n name: \"Adi Thalam\",\n bars: [\n new Bar({ name: \"Laghu\", beatLengths: [1, 1, 1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n ],\n });\n\n constructor(config: null | { name?: string; bars?: Bar[] } = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n this.bars = config.bars || [];\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, bars: this.bars.map((p) => p.debugValue()) };\n }\n\n children(): Entity[] {\n return this.bars;\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) {\n return false;\n }\n if (this.bars.length != another.bars.length) return false;\n for (let i = 0; i < this.bars.length; i++) {\n if (!this.bars[i].equals(another.bars[i])) return false;\n }\n return true;\n }\n\n /**\n * Given a global beat index returns four values [cycle,bar,beat,instance] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global beat\n * index can be greater the number of beats in this cycle this\n * allows us to wrap around. Similarly if beatindex is less than\n * 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the\n * offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - Offset of the beat at this global index.\n */\n getAtIndex(globalIndex: number): [number, CyclePosition, Fraction] {\n let cycle = 0;\n while (globalIndex < 0) {\n globalIndex += this.totalBeatCount;\n cycle--;\n }\n if (globalIndex >= this.totalBeatCount) {\n cycle = Math.floor(globalIndex / this.totalBeatCount);\n }\n globalIndex = globalIndex % this.totalBeatCount;\n let offset = ZERO;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n if (globalIndex >= bar.totalBeatCount) {\n globalIndex -= bar.totalBeatCount;\n offset = offset.plus(bar.duration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n if (globalIndex >= beatCount) {\n globalIndex -= beatCount;\n offset = offset.plus(beatLength.timesNum(beatCount));\n } else {\n // this is it\n const instance = globalIndex;\n return [cycle, [barIndex, beatIndex, instance], offset.plus(beatLength.timesNum(instance))];\n }\n }\n }\n }\n throw new Error(\"Should not be here!\");\n }\n\n /**\n * Given a global offset returns five values [cycle, bar,beat,instance,offset] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global offset can be\n * greater the duration of the cycle this allows us to wrap around.\n * Similarly if globalOffset is less than 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - The note offset within the beat where the global offset lies.\n * globalIndex - The beat index within the entire cycle and not just within the bar.\n */\n getPosition(globalOffset: Fraction): [number, CyclePosition, Fraction, number] {\n const duration = this.duration;\n let cycleNum = 0;\n if (globalOffset.isLT(ZERO)) {\n while (globalOffset.isLT(ZERO)) {\n cycleNum--;\n globalOffset = globalOffset.plus(duration);\n }\n } else if (globalOffset.isGTE(duration)) {\n const realOffset = globalOffset.mod(duration);\n globalOffset = globalOffset.minus(realOffset).divby(duration);\n TSU.assert(globalOffset.isWhole);\n cycleNum = globalOffset.floor;\n globalOffset = realOffset;\n }\n\n // here globalOffset is positive and >= 0 and < this.duration\n let globalIndex = 0;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n const barDuration = bar.duration;\n if (globalOffset.isGTE(barDuration)) {\n globalOffset = globalOffset.minus(barDuration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n for (let instance = 0; instance < beatCount; instance++, globalIndex++) {\n if (globalOffset.isGTE(beatLength)) {\n globalOffset = globalOffset.minus(beatLength);\n } else {\n // this is it\n return [cycleNum, [barIndex, beatIndex, instance], globalOffset, globalIndex];\n }\n }\n }\n }\n globalIndex += bar.totalBeatCount;\n }\n\n throw new Error(\"Should not be here!\");\n }\n\n *iterateBeats(startBar = 0, startBeat = 0, startInstance = 0): CycleIterator {\n let barIndex = startBar;\n let beatIndex = startBeat;\n let instanceIndex = startInstance;\n while (true) {\n const currBar = this.bars[barIndex];\n yield [[barIndex, beatIndex, instanceIndex], currBar.beatLengths[beatIndex]];\n instanceIndex++;\n if (!currBar.beatCounts[beatIndex] || instanceIndex >= currBar.beatCounts[beatIndex]) {\n instanceIndex = 0;\n beatIndex++;\n if (beatIndex >= currBar.beatLengths.length) {\n beatIndex = 0;\n barIndex++;\n if (barIndex >= this.bars.length) {\n barIndex = 0;\n }\n }\n }\n }\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.bars = this.bars.map((x) => x.clone());\n }\n\n get beatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.beatCount;\n return out;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.totalBeatCount;\n return out;\n }\n\n /**\n * Total duration (of time) across all bars in this cycle.\n */\n get duration(): Fraction {\n return this.bars.reduce((x, y) => x.plus(y.duration), ZERO);\n }\n}\n\nexport class Line extends Entity {\n // Line can have atoms starting \"before\" the cycle. The offset tells how many notes\n // before or after the cycle this line's atoms start at.\n offset: Fraction = ZERO;\n roles: Role[] = [];\n\n // This is a very hacky solution to doing left side pre-margin text typically found\n // in notations - eg line X of a pallavi has this. This makes vertical space less wasteful\n // A better solution is inter-beat annotation but it is very complex and ambiguous for now\n marginText = \"\";\n\n get isEmpty(): boolean {\n for (const r of this.roles) if (!r.isEmpty) return false;\n return true;\n }\n\n debugValue(): any {\n const out = {\n ...super.debugValue(),\n roles: this.roles.map((r) => r.debugValue()),\n // layoutParams: this.layoutParams?.uuid,\n };\n if (!this.offset.isZero) {\n out.offset = this.offset.toString();\n }\n return out;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.roles = this.roles.map((r) => r.clone());\n }\n\n addAtoms(roleName: string, defaultToNotes: boolean, ...atoms: Atom[]): this {\n const role = this.ensureRole(roleName, defaultToNotes);\n role.addAtoms(...atoms);\n return this;\n }\n\n ensureRole(roleName: string, defaultToNotes: boolean): Role {\n // Ensure we have this many roles\n let ri = this.roles.findIndex((r) => r.name == roleName);\n if (ri < 0) {\n ri = this.roles.length;\n const role = new Role(this, roleName);\n role.defaultToNotes = defaultToNotes;\n this.roles.push(role);\n }\n return this.roles[ri];\n }\n\n /**\n * Returns the maximum duration of all roles in this line.\n */\n get duration(): Fraction {\n let max = ZERO;\n for (const role of this.roles) {\n max = TSU.Num.Fraction.max(role.duration, max);\n }\n return max;\n }\n}\n\nexport class Role extends Entity {\n defaultToNotes = true;\n atoms: Atom[] = [];\n\n constructor(public readonly line: Line, public readonly name: string) {\n super();\n }\n\n get isEmpty(): boolean {\n return this.atoms.length == 0;\n }\n\n debugValue(): any {\n return { name: this.name, atoms: this.atoms.map((a) => a.debugValue()) };\n }\n\n addAtoms(...atoms: Atom[]): void {\n let last: null | Atom = null;\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n this.atoms.push(atom);\n }\n last = atom;\n }\n }\n\n copyTo(another: Role): void {\n another.addAtoms(...this.atoms);\n }\n\n /**\n * Duration for this role.\n */\n get duration(): Fraction {\n return this.atoms.reduce((a, b) => a.plus(b.duration), ZERO);\n }\n}\n"]}
package/lib/cjs/loader.js CHANGED
@@ -143,7 +143,7 @@ function load(codeText, config) {
143
143
  }
144
144
  var buildTime = performance.now();
145
145
  if (config.log) {
146
- console.log("V4 Document, Parse Time: " + (parseTime - startTime) + "ms, Build Time: " + (buildTime - parseTime) + "ms");
146
+ console.log("V4 Document, Parse Time: ".concat(parseTime - startTime, "ms, Build Time: ").concat(buildTime - parseTime, "ms"));
147
147
  }
148
148
  return [
149
149
  notation,
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport * as G from \"galore\";\nimport { Line } from \"./core\";\nimport { BeatLayout, Beat, BeatsBuilder } from \"./layouts\";\nimport { Parser } from \"./parser\";\nimport { Notation } from \"./notation\";\n\nexport function load(\n codeText: string,\n config: any = {},\n): [Notation, Map<number, Beat[][]>, Map<number, BeatLayout>, G.ParseError[], TSU.StringMap<number>] {\n const beatsByLineRole = new Map<number, Beat[][]>();\n const beatLayouts = new Map<number, BeatLayout>();\n const errors: G.ParseError[] = [];\n const startTime = performance.now();\n const notation = new Notation();\n const parser = new Parser();\n parser.parse(codeText);\n errors.push(...parser.errors);\n const parseTime = performance.now();\n for (const cmd of parser.commands) cmd.applyToNotation(notation);\n\n // Create Line Beats\n for (const block of notation.blocks) {\n if (block.type == \"Line\") {\n const line = block as Line;\n // LP should exist by now\n const layoutParams = notation.layoutParamsForLine(line) || null;\n if (!line.isEmpty) {\n // Probably because this is an empty line and AddAtoms was not called\n TSU.assert(layoutParams != null, \"Layout params for a non empty line *should* exist\");\n let beatLayout = beatLayouts.get(layoutParams.uuid) || null;\n if (beatLayout == null) {\n beatLayout = new BeatLayout(layoutParams);\n beatLayouts.set(layoutParams.uuid, beatLayout);\n }\n const roleBeats = [] as Beat[][];\n beatsByLineRole.set(line.uuid, roleBeats);\n\n const lineOffset = line.offset.divbyNum(layoutParams.beatDuration);\n for (const role of line.roles) {\n const bb = new BeatsBuilder(role, layoutParams, lineOffset);\n bb.addAtoms(...role.atoms);\n roleBeats.push(bb.beats);\n\n // Add these to the beat layout too\n for (const beat of bb.beats) {\n beat.ensureUniformSpaces(layoutParams.beatDuration);\n beatLayout.addBeat(beat);\n }\n }\n }\n }\n }\n const buildTime = performance.now();\n if (config.log) {\n console.log(`V4 Document, Parse Time: ${parseTime - startTime}ms, Build Time: ${buildTime - parseTime}ms`);\n }\n return [\n notation,\n beatsByLineRole,\n beatLayouts,\n errors,\n {\n parseTime: parseTime - startTime,\n buildTime: buildTime - parseTime,\n },\n ];\n}\n"]}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport * as G from \"galore\";\nimport { Line } from \"./core\";\nimport { BeatLayout, Beat, BeatsBuilder } from \"./layouts\";\nimport { Parser } from \"./parser\";\nimport { Notation } from \"./notation\";\n\nexport function load(\n codeText: string,\n config: any = {},\n): [Notation, Map<number, Beat[][]>, Map<number, BeatLayout>, G.ParseError[], TSU.StringMap<number>] {\n const beatsByLineRole = new Map<number, Beat[][]>();\n const beatLayouts = new Map<number, BeatLayout>();\n const errors: G.ParseError[] = [];\n const startTime = performance.now();\n const notation = new Notation();\n const parser = new Parser();\n parser.parse(codeText);\n errors.push(...parser.errors);\n const parseTime = performance.now();\n for (const cmd of parser.commands) cmd.applyToNotation(notation);\n\n // Create Line Beats\n for (const block of notation.blocks) {\n if (block.type == \"Line\") {\n const line = block as Line;\n // LP should exist by now\n const layoutParams = notation.layoutParamsForLine(line) || null;\n if (!line.isEmpty) {\n // Probably because this is an empty line and AddAtoms was not called\n TSU.assert(layoutParams != null, \"Layout params for a non empty line *should* exist\");\n let beatLayout = beatLayouts.get(layoutParams.uuid) || null;\n if (beatLayout == null) {\n beatLayout = new BeatLayout(layoutParams);\n beatLayouts.set(layoutParams.uuid, beatLayout);\n }\n const roleBeats = [] as Beat[][];\n beatsByLineRole.set(line.uuid, roleBeats);\n\n const lineOffset = line.offset.divbyNum(layoutParams.beatDuration);\n for (const role of line.roles) {\n const bb = new BeatsBuilder(role, layoutParams, lineOffset);\n bb.addAtoms(...role.atoms);\n roleBeats.push(bb.beats);\n\n // Add these to the beat layout too\n for (const beat of bb.beats) {\n beat.ensureUniformSpaces(layoutParams.beatDuration);\n beatLayout.addBeat(beat);\n }\n }\n }\n }\n }\n const buildTime = performance.now();\n if (config.log) {\n console.log(`V4 Document, Parse Time: ${parseTime - startTime}ms, Build Time: ${buildTime - parseTime}ms`);\n }\n return [\n notation,\n beatsByLineRole,\n beatLayouts,\n errors,\n {\n parseTime: parseTime - startTime,\n buildTime: buildTime - parseTime,\n },\n ];\n}\n"]}
package/lib/cjs/parser.js CHANGED
@@ -66,7 +66,7 @@ var _a = __read(G.newParser(String.raw(templateObject_1 || (templateObject_1 = _
66
66
  var _a = __read(owner.parseEmbelishment(token.value), 2), emb = _a[0], pre = _a[1];
67
67
  if (emb == null) {
68
68
  console.log("Skipping Embelishment: ", token.value);
69
- owner.errors.push(new TLEX.TokenizerError("Invalid embelishment: " + token.value, token.start, 1 + token.end - token.start, "InvalidEmbelishment", token.value));
69
+ owner.errors.push(new TLEX.TokenizerError("Invalid embelishment: ".concat(token.value), token.start, 1 + token.end - token.start, "InvalidEmbelishment", token.value));
70
70
  return null;
71
71
  }
72
72
  token.value = emb;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport * as G from \"galore\";\nimport * as TLEX from \"tlex\";\nimport { Literal, AtomType, Note, Atom, Rest, Space, Syllable, Group } from \"./core\";\nimport { Command, CmdParam } from \"./notation\";\nimport {\n RawEmbedding,\n ApplyLayout,\n AddAtoms,\n SetCycle,\n SetBeatDuration,\n SetBreaks,\n ActivateRole,\n CreateRole,\n CreateLine,\n MetaData,\n} from \"./commands\";\n\n// TODO - Make this plugable from the client instead of hard coded\nimport * as carnatic from \"./carnatic\";\n\nconst ONE = TSU.Num.Fraction.ONE;\nconst TWO = ONE.timesNum(2);\n\n/**\n * V4 of our parser builds on V3 and has the following improvements:\n *\n * 1. Embedding Headings to demarcate sections so users dont have to use\n * explicit MD for headings.\n * 2. Unlike V3 here users break out *of* song instead instead break out \"into\"\n * song. So users spend more time writing notation and less worrying about\n * other things like headings etc.\n */\nconst [parser, itemGraph] = G.newParser(\n String.raw`\n %define IdentChar /[^%!@&\\^|\\[\\]={}()+\\-,;~: \\t\\f\\r\\n\\v\\\\\\.]/\n\n %token BSLASH \"\\\\\"\n %token OPEN_SQ \"[\"\n %token CLOSE_SQ \"]\"\n %token EQUALS \"=\"\n %token OPEN_PAREN \"(\"\n %token CLOSE_PAREN \")\"\n %token OPEN_BRACE \"{\"\n %token CLOSE_BRACE \"}\"\n %token SLASH \"/\"\n %token STAR \"*\"\n %token CARET \"^\"\n // %skip \"-\"\n %token COMMA \",\"\n %token SEMI_COLON \";\"\n %token COLON \":\"\n\n %token SINGLE_LINE_RAW_STRING />(.*)$/m { toSingleLineRawString }\n %token MULTI_LINE_RAW_STRING /r(#{0,})\"/ { toMultiLineRawString }\n\n %token EMBELISHMENT /~[^\\s]*/ { toEmbelishment }\n %token NUMBER /-?\\d+/ { toNumber }\n %token BOOLEAN /true|false/ { toBoolean }\n %token STRING /\"([^\"\\\\\\n]|\\\\.|\\\\\\n)*\"/ { toString }\n %token STRING /'([^'\\\\\\n]|\\\\.|\\\\\\n)*'/ { toString }\n %token DOTS_IDENT /(\\.+)({IdentChar}+)/ { toOctavedNote }\n %token IDENT_DOTS /({IdentChar}+)(\\.+)/ { toOctavedNote }\n %token IDENT_COLON /{IdentChar}+:/ { toRoleSelector }\n %token IDENT /{IdentChar}+/\n %token BSLASH_IDENT /\\\\{IDENT}/ { toCommandName }\n %token BSLASH_NUMBER /\\\\{NUMBER}/\n %token HYPHEN /-/\n %skip /[ \\t\\n\\f\\r]+/\n %skip_flex \"//.*$\"\n %skip /\\/\\*.*?\\*\\//\n\n Elements -> Elements Command Atoms { appendCommand } \n | Elements RoleSelector Atoms { appendRoleSelector } \n | Elements Embedding Atoms { insertEmbedding }\n | Atoms { appendAtoms }\n ;\n\n Embedding -> SINGLE_LINE_RAW_STRING | MULTI_LINE_RAW_STRING ;\n\n Command -> BSLASH_IDENT CommandParams ? { newCommand } ;\n CommandParams -> OPEN_PAREN ParamList ? CLOSE_PAREN { $2 } ;\n\n ParamList -> ParamList COMMA Param { concatParamList } ;\n ParamList -> Param { newParamList };\n Param -> ParamValue { newParam } ;\n Param -> ParamKey EQUALS ParamValue { newParam } ;\n ParamKey -> IDENT ;\n ParamValue -> ( STRING | Fraction | NUMBER | BOOLEAN ) ;\n\n RoleSelector -> IDENT_COLON ;\n\n Atoms -> Atoms Atom { concatAtoms } ;\n Atoms -> { newArray } ;\n\n Atom -> Leaf ;\n Atom -> Duration Leaf { applyDuration } ;\n Leaf -> Space | Lit | Group | Rest ;\n Rest -> HYPHEN { newRest };\n\n Space -> COMMA { newSpace } \n | SEMI_COLON { newDoubleSpace } \n | UNDER_SCORE { newSilentSpace } \n ;\n\n /*\n Lit -> DOTS_IDENT { litToAtom } \n | IDENT { litToAtom } \n | IDENT_DOTS { litToAtom } \n | STRING { litToAtom }\n | PRE_EMB Lit { litWithPreEmb }\n // | Lit POST_EMB { litWithPostEmb }\n ;\n */\n\n /* - An alternative representation to support both pre and post embelishment operators. */\n Lit -> Lit POST_EMB { litWithPostEmb }\n | PreEmbLit\n ;\n\n PreEmbLit -> LitToken \n | LitToken CARET NUMBER { litWithCaret }\n | LitToken CARET STAR { litWithCaret }\n | PRE_EMB PreEmbLit { litWithPreEmb }\n ;\n \n LitToken -> DOTS_IDENT { litToAtom }\n | IDENT { litToAtom }\n | IDENT_DOTS { litToAtom }\n | STRING { litToAtom }\n ;\n\n Group -> OPEN_SQ Atoms CLOSE_SQ { newGroup };\n\n Duration -> Fraction | NUMBER;\n Fraction -> NUMBER SLASH NUMBER { newFraction } ;\n `,\n {\n allowLeftRecursion: true,\n debug: \"\",\n type: \"lalr\",\n tokenHandlers: {\n toEmbelishment: (token: TLEX.Token, tape: TLEX.Tape, owner: Parser) => {\n const [emb, pre] = owner.parseEmbelishment(token.value);\n if (emb == null) {\n console.log(\"Skipping Embelishment: \", token.value);\n owner.errors.push(\n new TLEX.TokenizerError(\n `Invalid embelishment: ${token.value}`,\n token.start,\n 1 + token.end - token.start,\n \"InvalidEmbelishment\",\n token.value,\n ),\n );\n return null;\n }\n token.value = emb;\n token.tag = pre ? \"PRE_EMB\" : \"POST_EMB\";\n return token;\n },\n toCommandName: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(1);\n return token;\n },\n toBoolean: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value == \"true\";\n return token;\n },\n toNumber: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = parseInt(token.value);\n return token;\n },\n toString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(1, token.value.length - 1);\n return token;\n },\n toOctavedNote: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n if (token.tag == \"DOTS_IDENT\") {\n const octave = token.positions[1][1] - token.positions[1][0];\n const note = token.value.substring(octave);\n token.value = new Note(note, ONE, -octave);\n } else if (token.tag == \"IDENT_DOTS\") {\n const octave = token.positions[2][1] - token.positions[2][0];\n const note = token.value.substring(0, token.value.length - octave);\n token.value = new Note(note, ONE, octave);\n } else {\n throw new Error(\"Invalid token for converting to note: \" + token.tag);\n }\n return token;\n },\n toRoleSelector: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(0, token.value.length - 1);\n return token;\n },\n toLineAnnotation: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // skip the initial \"!\"\n token.value = token.value.substring(1);\n return token;\n },\n toSingleLineRawString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // skip the initial \">\"\n token.value = token.value.substring(1);\n return token;\n },\n toMultiLineRawString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // consume everything until \"#<N times> as start\n const hashes = tape.substring(token.positions[1][0], token.positions[1][1]);\n const endPat = '\"' + hashes;\n const startPos = tape.index;\n const endPos = TLEX.TapeHelper.advanceAfter(tape, endPat) - endPat.length;\n if (endPos < 0) {\n throw new Error(\"EOF expected while finding end of Raw String Literal: '\" + endPat + \"'\");\n }\n token.value = tape.substring(startPos, endPos);\n return token;\n },\n },\n },\n);\n\n/**\n * A notation doc is a list of lines that are found in a single document.\n *\n * Since our document (md or html etc) can contain multiple snippets\n * all these snippets are related\n */\nexport class Parser {\n errors: TLEX.TokenizerError[] = [];\n readonly commands: Command[] = [];\n // readonly notation: Notation = new Notation();\n private runCommandFound = false;\n // readonly parseTree = new PTNodeList(\"Snippet\", null);\n\n protected ruleHandlers = {\n newFraction: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n if (children.length == 1) {\n return new TSU.Num.Fraction(children[0].value);\n } else {\n return new TSU.Num.Fraction(children[0].value, children[2].value);\n }\n },\n newGroup: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const out = new Group(TWO, ...children[1].value);\n out.durationIsMultiplier = true;\n return out;\n },\n litWithCaret: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = Note.fromLit(children[0].value as Literal);\n const opnode = children[2];\n const shiftValue = opnode.sym.label == \"STAR\" ? true : opnode.value;\n lit.shift = shiftValue;\n return lit;\n },\n litWithPreEmb: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const emb = children[0];\n const lit = children[1].value as Literal;\n lit.embelishments.splice(0, 0, emb.value);\n return lit;\n },\n litWithPostEmb: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = children[0].value as Literal;\n const emb = children[1];\n lit.embelishments.push(emb);\n return lit;\n },\n litToAtom: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = children[0];\n if (lit.sym.label == \"DOTS_IDENT\" || lit.sym.label == \"IDENT_DOTS\") {\n return lit.value;\n } else if (lit.sym.label == \"IDENT\") {\n // Mark this as a Literal to be processed later\n return new Literal(lit.value);\n // return role.notesOnly ? new Note(lit.value) : new Syllable(lit.value);\n } else if (lit.sym.label == \"STRING\") {\n // const role = this.snippet.currRole;\n // if (role.notesOnly) throw new Error(\"Strings cannot appear in notes only mode\");\n return new Syllable(lit.value);\n } else {\n throw new Error(\"Invalid lit: \" + lit);\n }\n },\n newSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space();\n },\n newRest: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Rest();\n },\n newDoubleSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space(ONE.timesNum(2));\n },\n newSilentSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space(ONE, true);\n },\n applyDuration: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n let dur = children[0].value as TSU.Num.Fraction | number;\n const leaf = children[1].value as Atom;\n if (typeof dur === \"number\") {\n dur = ONE.timesNum(dur);\n }\n leaf.duration = dur;\n if (leaf.type == AtomType.GROUP) {\n (leaf as Group).durationIsMultiplier = true;\n }\n return leaf;\n },\n newArray: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n // create an array of values from all the values of child nodes\n return children.map((c) => c.value);\n },\n concatAtoms: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const atoms = children[0].value;\n const atom = children[1].value;\n atoms.push(atom);\n return atoms;\n },\n newParam: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n if (children.length == 1) {\n return { key: null, value: children[0].value };\n } else {\n return { key: children[0].value, value: children[2].value };\n }\n },\n newParamList: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return [children[0].value];\n },\n concatParamList: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const params = children[0].value;\n const newParam = children[2].value;\n params.push(newParam);\n return params;\n },\n newCommand: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return this.createCommand(children[0].value, children[1].value);\n },\n appendAtoms: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const atoms = children[0].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n appendCommand: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const command = children[1].value as Command;\n this.addCommand(command);\n\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n appendRoleSelector: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const roleName = children[1].value;\n const lName = roleName.toLowerCase().trim();\n this.addCommand(new ActivateRole([{ key: null, value: lName }]));\n\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n insertEmbedding: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n // How to handle embeddings - these are just blocks\n // to escape out of song (most likely for some rendering of html/md etc)\n const rawVal = children[1].value;\n this.addCommand(new RawEmbedding([{ key: null, value: rawVal }]));\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n };\n\n constructor(config?: any) {\n config = config || {};\n }\n\n createCommand(name: string, params: CmdParam[]): Command {\n const lName = name.trim().toLowerCase();\n params = params || [];\n if (lName == \"line\") {\n return new CreateLine(params);\n } else if (lName == \"meta\") {\n return new MetaData(params);\n } else if (lName == \"role\") {\n return new CreateRole(params);\n } else if (lName == \"layout\") {\n return new ApplyLayout(params);\n } else if (lName == \"beatduration\") {\n return new SetBeatDuration(params);\n } else if (lName == \"breaks\") {\n return new SetBreaks(params);\n } else if (lName == \"cycle\") {\n return new SetCycle(params);\n } else {\n // Try to set this as the current role\n throw new Error(\"Invalid command: \" + lName);\n }\n }\n\n addCommand(cmd: Command): void {\n cmd.index = this.commands.length;\n this.commands.push(cmd);\n }\n\n parse(input: string): any {\n this.errors = [];\n const ptree = parser.parse(input, {\n tokenizerContext: this,\n ruleHandlers: this.ruleHandlers,\n onTokenError: (err: TLEX.TokenizerError) => {\n this.errors.push(err);\n return true;\n },\n });\n return ptree;\n }\n\n parseEmbelishment(value: string): [any, boolean] {\n return carnatic.parseEmbelishment(value);\n }\n}\n"]}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport * as G from \"galore\";\nimport * as TLEX from \"tlex\";\nimport { Literal, AtomType, Note, Atom, Rest, Space, Syllable, Group } from \"./core\";\nimport { Command, CmdParam } from \"./notation\";\nimport {\n RawEmbedding,\n ApplyLayout,\n AddAtoms,\n SetCycle,\n SetBeatDuration,\n SetBreaks,\n ActivateRole,\n CreateRole,\n CreateLine,\n MetaData,\n} from \"./commands\";\n\n// TODO - Make this plugable from the client instead of hard coded\nimport * as carnatic from \"./carnatic\";\n\nconst ONE = TSU.Num.Fraction.ONE;\nconst TWO = ONE.timesNum(2);\n\n/**\n * V4 of our parser builds on V3 and has the following improvements:\n *\n * 1. Embedding Headings to demarcate sections so users dont have to use\n * explicit MD for headings.\n * 2. Unlike V3 here users break out *of* song instead instead break out \"into\"\n * song. So users spend more time writing notation and less worrying about\n * other things like headings etc.\n */\nconst [parser, itemGraph] = G.newParser(\n String.raw`\n %define IdentChar /[^%!@&\\^|\\[\\]={}()+\\-,;~: \\t\\f\\r\\n\\v\\\\\\.]/\n\n %token BSLASH \"\\\\\"\n %token OPEN_SQ \"[\"\n %token CLOSE_SQ \"]\"\n %token EQUALS \"=\"\n %token OPEN_PAREN \"(\"\n %token CLOSE_PAREN \")\"\n %token OPEN_BRACE \"{\"\n %token CLOSE_BRACE \"}\"\n %token SLASH \"/\"\n %token STAR \"*\"\n %token CARET \"^\"\n // %skip \"-\"\n %token COMMA \",\"\n %token SEMI_COLON \";\"\n %token COLON \":\"\n\n %token SINGLE_LINE_RAW_STRING />(.*)$/m { toSingleLineRawString }\n %token MULTI_LINE_RAW_STRING /r(#{0,})\"/ { toMultiLineRawString }\n\n %token EMBELISHMENT /~[^\\s]*/ { toEmbelishment }\n %token NUMBER /-?\\d+/ { toNumber }\n %token BOOLEAN /true|false/ { toBoolean }\n %token STRING /\"([^\"\\\\\\n]|\\\\.|\\\\\\n)*\"/ { toString }\n %token STRING /'([^'\\\\\\n]|\\\\.|\\\\\\n)*'/ { toString }\n %token DOTS_IDENT /(\\.+)({IdentChar}+)/ { toOctavedNote }\n %token IDENT_DOTS /({IdentChar}+)(\\.+)/ { toOctavedNote }\n %token IDENT_COLON /{IdentChar}+:/ { toRoleSelector }\n %token IDENT /{IdentChar}+/\n %token BSLASH_IDENT /\\\\{IDENT}/ { toCommandName }\n %token BSLASH_NUMBER /\\\\{NUMBER}/\n %token HYPHEN /-/\n %skip /[ \\t\\n\\f\\r]+/\n %skip_flex \"//.*$\"\n %skip /\\/\\*.*?\\*\\//\n\n Elements -> Elements Command Atoms { appendCommand } \n | Elements RoleSelector Atoms { appendRoleSelector } \n | Elements Embedding Atoms { insertEmbedding }\n | Atoms { appendAtoms }\n ;\n\n Embedding -> SINGLE_LINE_RAW_STRING | MULTI_LINE_RAW_STRING ;\n\n Command -> BSLASH_IDENT CommandParams ? { newCommand } ;\n CommandParams -> OPEN_PAREN ParamList ? CLOSE_PAREN { $2 } ;\n\n ParamList -> ParamList COMMA Param { concatParamList } ;\n ParamList -> Param { newParamList };\n Param -> ParamValue { newParam } ;\n Param -> ParamKey EQUALS ParamValue { newParam } ;\n ParamKey -> IDENT ;\n ParamValue -> ( STRING | Fraction | NUMBER | BOOLEAN ) ;\n\n RoleSelector -> IDENT_COLON ;\n\n Atoms -> Atoms Atom { concatAtoms } ;\n Atoms -> { newArray } ;\n\n Atom -> Leaf ;\n Atom -> Duration Leaf { applyDuration } ;\n Leaf -> Space | Lit | Group | Rest ;\n Rest -> HYPHEN { newRest };\n\n Space -> COMMA { newSpace } \n | SEMI_COLON { newDoubleSpace } \n | UNDER_SCORE { newSilentSpace } \n ;\n\n /*\n Lit -> DOTS_IDENT { litToAtom } \n | IDENT { litToAtom } \n | IDENT_DOTS { litToAtom } \n | STRING { litToAtom }\n | PRE_EMB Lit { litWithPreEmb }\n // | Lit POST_EMB { litWithPostEmb }\n ;\n */\n\n /* - An alternative representation to support both pre and post embelishment operators. */\n Lit -> Lit POST_EMB { litWithPostEmb }\n | PreEmbLit\n ;\n\n PreEmbLit -> LitToken \n | LitToken CARET NUMBER { litWithCaret }\n | LitToken CARET STAR { litWithCaret }\n | PRE_EMB PreEmbLit { litWithPreEmb }\n ;\n \n LitToken -> DOTS_IDENT { litToAtom }\n | IDENT { litToAtom }\n | IDENT_DOTS { litToAtom }\n | STRING { litToAtom }\n ;\n\n Group -> OPEN_SQ Atoms CLOSE_SQ { newGroup };\n\n Duration -> Fraction | NUMBER;\n Fraction -> NUMBER SLASH NUMBER { newFraction } ;\n `,\n {\n allowLeftRecursion: true,\n debug: \"\",\n type: \"lalr\",\n tokenHandlers: {\n toEmbelishment: (token: TLEX.Token, tape: TLEX.Tape, owner: Parser) => {\n const [emb, pre] = owner.parseEmbelishment(token.value);\n if (emb == null) {\n console.log(\"Skipping Embelishment: \", token.value);\n owner.errors.push(\n new TLEX.TokenizerError(\n `Invalid embelishment: ${token.value}`,\n token.start,\n 1 + token.end - token.start,\n \"InvalidEmbelishment\",\n token.value,\n ),\n );\n return null;\n }\n token.value = emb;\n token.tag = pre ? \"PRE_EMB\" : \"POST_EMB\";\n return token;\n },\n toCommandName: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(1);\n return token;\n },\n toBoolean: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value == \"true\";\n return token;\n },\n toNumber: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = parseInt(token.value);\n return token;\n },\n toString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(1, token.value.length - 1);\n return token;\n },\n toOctavedNote: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n if (token.tag == \"DOTS_IDENT\") {\n const octave = token.positions[1][1] - token.positions[1][0];\n const note = token.value.substring(octave);\n token.value = new Note(note, ONE, -octave);\n } else if (token.tag == \"IDENT_DOTS\") {\n const octave = token.positions[2][1] - token.positions[2][0];\n const note = token.value.substring(0, token.value.length - octave);\n token.value = new Note(note, ONE, octave);\n } else {\n throw new Error(\"Invalid token for converting to note: \" + token.tag);\n }\n return token;\n },\n toRoleSelector: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n token.value = token.value.substring(0, token.value.length - 1);\n return token;\n },\n toLineAnnotation: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // skip the initial \"!\"\n token.value = token.value.substring(1);\n return token;\n },\n toSingleLineRawString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // skip the initial \">\"\n token.value = token.value.substring(1);\n return token;\n },\n toMultiLineRawString: (token: TLEX.Token, tape: TLEX.Tape, owner: any) => {\n // consume everything until \"#<N times> as start\n const hashes = tape.substring(token.positions[1][0], token.positions[1][1]);\n const endPat = '\"' + hashes;\n const startPos = tape.index;\n const endPos = TLEX.TapeHelper.advanceAfter(tape, endPat) - endPat.length;\n if (endPos < 0) {\n throw new Error(\"EOF expected while finding end of Raw String Literal: '\" + endPat + \"'\");\n }\n token.value = tape.substring(startPos, endPos);\n return token;\n },\n },\n },\n);\n\n/**\n * A notation doc is a list of lines that are found in a single document.\n *\n * Since our document (md or html etc) can contain multiple snippets\n * all these snippets are related\n */\nexport class Parser {\n errors: TLEX.TokenizerError[] = [];\n readonly commands: Command[] = [];\n // readonly notation: Notation = new Notation();\n private runCommandFound = false;\n // readonly parseTree = new PTNodeList(\"Snippet\", null);\n\n protected ruleHandlers = {\n newFraction: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n if (children.length == 1) {\n return new TSU.Num.Fraction(children[0].value);\n } else {\n return new TSU.Num.Fraction(children[0].value, children[2].value);\n }\n },\n newGroup: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const out = new Group(TWO, ...children[1].value);\n out.durationIsMultiplier = true;\n return out;\n },\n litWithCaret: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = Note.fromLit(children[0].value as Literal);\n const opnode = children[2];\n const shiftValue = opnode.sym.label == \"STAR\" ? true : opnode.value;\n lit.shift = shiftValue;\n return lit;\n },\n litWithPreEmb: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const emb = children[0];\n const lit = children[1].value as Literal;\n lit.embelishments.splice(0, 0, emb.value);\n return lit;\n },\n litWithPostEmb: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = children[0].value as Literal;\n const emb = children[1];\n lit.embelishments.push(emb);\n return lit;\n },\n litToAtom: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const lit = children[0];\n if (lit.sym.label == \"DOTS_IDENT\" || lit.sym.label == \"IDENT_DOTS\") {\n return lit.value;\n } else if (lit.sym.label == \"IDENT\") {\n // Mark this as a Literal to be processed later\n return new Literal(lit.value);\n // return role.notesOnly ? new Note(lit.value) : new Syllable(lit.value);\n } else if (lit.sym.label == \"STRING\") {\n // const role = this.snippet.currRole;\n // if (role.notesOnly) throw new Error(\"Strings cannot appear in notes only mode\");\n return new Syllable(lit.value);\n } else {\n throw new Error(\"Invalid lit: \" + lit);\n }\n },\n newSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space();\n },\n newRest: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Rest();\n },\n newDoubleSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space(ONE.timesNum(2));\n },\n newSilentSpace: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return new Space(ONE, true);\n },\n applyDuration: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n let dur = children[0].value as TSU.Num.Fraction | number;\n const leaf = children[1].value as Atom;\n if (typeof dur === \"number\") {\n dur = ONE.timesNum(dur);\n }\n leaf.duration = dur;\n if (leaf.type == AtomType.GROUP) {\n (leaf as Group).durationIsMultiplier = true;\n }\n return leaf;\n },\n newArray: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n // create an array of values from all the values of child nodes\n return children.map((c) => c.value);\n },\n concatAtoms: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const atoms = children[0].value;\n const atom = children[1].value;\n atoms.push(atom);\n return atoms;\n },\n newParam: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n if (children.length == 1) {\n return { key: null, value: children[0].value };\n } else {\n return { key: children[0].value, value: children[2].value };\n }\n },\n newParamList: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return [children[0].value];\n },\n concatParamList: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const params = children[0].value;\n const newParam = children[2].value;\n params.push(newParam);\n return params;\n },\n newCommand: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n return this.createCommand(children[0].value, children[1].value);\n },\n appendAtoms: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const atoms = children[0].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n appendCommand: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const command = children[1].value as Command;\n this.addCommand(command);\n\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n appendRoleSelector: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n const roleName = children[1].value;\n const lName = roleName.toLowerCase().trim();\n this.addCommand(new ActivateRole([{ key: null, value: lName }]));\n\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n insertEmbedding: (rule: G.Rule, parent: G.PTNode, ...children: G.PTNode[]) => {\n // How to handle embeddings - these are just blocks\n // to escape out of song (most likely for some rendering of html/md etc)\n const rawVal = children[1].value;\n this.addCommand(new RawEmbedding([{ key: null, value: rawVal }]));\n const atoms = children[2].value as Atom[];\n if (atoms.length > 0) {\n this.addCommand(new AddAtoms(...atoms));\n }\n return null;\n },\n };\n\n constructor(config?: any) {\n config = config || {};\n }\n\n createCommand(name: string, params: CmdParam[]): Command {\n const lName = name.trim().toLowerCase();\n params = params || [];\n if (lName == \"line\") {\n return new CreateLine(params);\n } else if (lName == \"meta\") {\n return new MetaData(params);\n } else if (lName == \"role\") {\n return new CreateRole(params);\n } else if (lName == \"layout\") {\n return new ApplyLayout(params);\n } else if (lName == \"beatduration\") {\n return new SetBeatDuration(params);\n } else if (lName == \"breaks\") {\n return new SetBreaks(params);\n } else if (lName == \"cycle\") {\n return new SetCycle(params);\n } else {\n // Try to set this as the current role\n throw new Error(\"Invalid command: \" + lName);\n }\n }\n\n addCommand(cmd: Command): void {\n cmd.index = this.commands.length;\n this.commands.push(cmd);\n }\n\n parse(input: string): any {\n this.errors = [];\n const ptree = parser.parse(input, {\n tokenizerContext: this,\n ruleHandlers: this.ruleHandlers,\n onTokenError: (err: TLEX.TokenizerError) => {\n this.errors.push(err);\n return true;\n },\n });\n return ptree;\n }\n\n parseEmbelishment(value: string): [any, boolean] {\n return carnatic.parseEmbelishment(value);\n }\n}\n"]}
package/lib/cjs/utils.js CHANGED
@@ -86,13 +86,24 @@ function parseBar(barStr) {
86
86
  }
87
87
  else {
88
88
  for (var i = 0; i < bars.length; i++) {
89
- if (/^,+$/.test(bars[i])) {
90
- cp.beatLengths.push(TSU.Num.Frac(bars[i].length));
89
+ var comps = bars[i].split(":");
90
+ var length_1 = comps[0];
91
+ var count = comps[1] || "";
92
+ if (length_1.length == 0) {
93
+ cp.beatLengths.push(TSU.Num.Frac(1));
94
+ }
95
+ else if (/^,+$/.test(length_1)) {
96
+ cp.beatLengths.push(TSU.Num.Frac(length_1.length));
97
+ }
98
+ else {
99
+ cp.beatLengths.push(TSU.Num.Fraction.parse(length_1));
100
+ }
101
+ var beatCount = parseInt(count);
102
+ if (isNaN(beatCount)) {
103
+ cp.beatCounts.push(1);
91
104
  }
92
105
  else {
93
- var num = parseInt(bars[i]);
94
- if (num)
95
- cp.beatLengths.push(TSU.Num.Frac(num));
106
+ cp.beatCounts.push(beatCount);
96
107
  }
97
108
  }
98
109
  }