notations 0.0.46 → 0.0.49
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.
- package/lib/cjs/beats.d.ts +34 -69
- package/lib/cjs/beats.js +178 -439
- package/lib/cjs/beats.js.map +1 -1
- package/lib/cjs/beatutils.d.ts +3 -0
- package/lib/cjs/beatutils.js +64 -0
- package/lib/cjs/beatutils.js.map +1 -0
- package/lib/cjs/beatview.d.ts +18 -0
- package/lib/cjs/beatview.js +62 -0
- package/lib/cjs/beatview.js.map +1 -0
- package/lib/cjs/carnatic/LineView.d.ts +2 -7
- package/lib/cjs/carnatic/LineView.js +13 -31
- package/lib/cjs/carnatic/LineView.js.map +1 -1
- package/lib/cjs/carnatic/NotationView.d.ts +8 -7
- package/lib/cjs/carnatic/NotationView.js +76 -153
- package/lib/cjs/carnatic/NotationView.js.map +1 -1
- package/lib/cjs/carnatic/atomviews.js +149 -287
- package/lib/cjs/carnatic/atomviews.js.map +1 -1
- package/lib/cjs/carnatic/beatviews.d.ts +4 -13
- package/lib/cjs/carnatic/beatviews.js +23 -118
- package/lib/cjs/carnatic/beatviews.js.map +1 -1
- package/lib/cjs/carnatic/embelishments.d.ts +1 -1
- package/lib/cjs/carnatic/embelishments.js +189 -283
- package/lib/cjs/carnatic/embelishments.js.map +1 -1
- package/lib/cjs/carnatic/gamakas.js +15 -47
- package/lib/cjs/carnatic/gamakas.js.map +1 -1
- package/lib/cjs/commands.js +111 -271
- package/lib/cjs/commands.js.map +1 -1
- package/lib/cjs/core.d.ts +14 -1
- package/lib/cjs/core.js +291 -477
- package/lib/cjs/core.js.map +1 -1
- package/lib/cjs/cycle.js +175 -367
- package/lib/cjs/cycle.js.map +1 -1
- package/lib/cjs/entity.js +48 -102
- package/lib/cjs/entity.js.map +1 -1
- package/lib/cjs/grids.d.ts +125 -0
- package/lib/cjs/grids.js +550 -0
- package/lib/cjs/grids.js.map +1 -0
- package/lib/cjs/iterators.js +96 -234
- package/lib/cjs/iterators.js.map +1 -1
- package/lib/cjs/layouts.d.ts +1 -1
- package/lib/cjs/layouts.js +62 -98
- package/lib/cjs/layouts.js.map +1 -1
- package/lib/cjs/loader.d.ts +2 -2
- package/lib/cjs/loader.js +23 -123
- package/lib/cjs/loader.js.map +1 -1
- package/lib/cjs/notation.d.ts +0 -3
- package/lib/cjs/notation.js +139 -241
- package/lib/cjs/notation.js.map +1 -1
- package/lib/cjs/parser.d.ts +2 -0
- package/lib/cjs/parser.js +225 -214
- package/lib/cjs/parser.js.map +1 -1
- package/lib/cjs/shapes.js +149 -283
- package/lib/cjs/shapes.js.map +1 -1
- package/lib/cjs/utils.d.ts +8 -0
- package/lib/cjs/utils.js +60 -55
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/beats.d.ts +34 -69
- package/lib/esm/beats.js +172 -438
- package/lib/esm/beats.js.map +1 -1
- package/lib/esm/beatutils.d.ts +3 -0
- package/lib/esm/beatutils.js +37 -0
- package/lib/esm/beatutils.js.map +1 -0
- package/lib/esm/beatview.d.ts +18 -0
- package/lib/esm/beatview.js +35 -0
- package/lib/esm/beatview.js.map +1 -0
- package/lib/esm/carnatic/LineView.d.ts +2 -7
- package/lib/esm/carnatic/LineView.js +12 -31
- package/lib/esm/carnatic/LineView.js.map +1 -1
- package/lib/esm/carnatic/NotationView.d.ts +8 -7
- package/lib/esm/carnatic/NotationView.js +74 -152
- package/lib/esm/carnatic/NotationView.js.map +1 -1
- package/lib/esm/carnatic/atomviews.js +144 -284
- package/lib/esm/carnatic/atomviews.js.map +1 -1
- package/lib/esm/carnatic/beatviews.d.ts +4 -13
- package/lib/esm/carnatic/beatviews.js +21 -94
- package/lib/esm/carnatic/beatviews.js.map +1 -1
- package/lib/esm/carnatic/embelishments.d.ts +1 -1
- package/lib/esm/carnatic/embelishments.js +187 -296
- package/lib/esm/carnatic/embelishments.js.map +1 -1
- package/lib/esm/carnatic/gamakas.js +14 -48
- package/lib/esm/carnatic/gamakas.js.map +1 -1
- package/lib/esm/commands.js +100 -271
- package/lib/esm/commands.js.map +1 -1
- package/lib/esm/core.d.ts +14 -1
- package/lib/esm/core.js +287 -484
- package/lib/esm/core.js.map +1 -1
- package/lib/esm/cycle.js +172 -367
- package/lib/esm/cycle.js.map +1 -1
- package/lib/esm/entity.js +48 -104
- package/lib/esm/entity.js.map +1 -1
- package/lib/esm/grids.d.ts +125 -0
- package/lib/esm/grids.js +517 -0
- package/lib/esm/grids.js.map +1 -0
- package/lib/esm/iterators.js +93 -235
- package/lib/esm/iterators.js.map +1 -1
- package/lib/esm/layouts.d.ts +1 -1
- package/lib/esm/layouts.js +60 -97
- package/lib/esm/layouts.js.map +1 -1
- package/lib/esm/loader.d.ts +2 -2
- package/lib/esm/loader.js +20 -120
- package/lib/esm/loader.js.map +1 -1
- package/lib/esm/notation.d.ts +0 -3
- package/lib/esm/notation.js +135 -242
- package/lib/esm/notation.js.map +1 -1
- package/lib/esm/parser.d.ts +2 -0
- package/lib/esm/parser.js +220 -210
- package/lib/esm/parser.js.map +1 -1
- package/lib/esm/shapes.js +148 -288
- package/lib/esm/shapes.js.map +1 -1
- package/lib/esm/utils.d.ts +8 -0
- package/lib/esm/utils.js +55 -51
- package/lib/esm/utils.js.map +1 -1
- package/package.json +18 -17
package/lib/esm/shapes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../src/shapes.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Atom, LeafAtom, Group } from \"./core\";\n\n/**\n * Base class of all renderable objects for caching things like bounding boxes etc.\n * We do this since a lot of the property setters dont change bounding boxes but\n * bounding box reads are a bit slow in general. This also allows us to test\n * layouts, positioning etc without having to worry about implementation details.\n */\nexport abstract class Shape {\n private static idCounter = 0;\n readonly shapeId: number = Shape.idCounter++;\n /**\n * Note that x and y coordinates are not always the x and y coordinates\n * of the bounding box.\n * Eg a circle's x and y coordinates are its center point and not the\n * top left corner.\n * These \"main\" coordinates are referred as control coordinates.\n */\n protected _x: number | null = null;\n protected _y: number | null = null;\n protected _width: number | null = null;\n protected _height: number | null = null;\n protected _bbox: TSU.Geom.Rect;\n protected _minSize: TSU.Geom.Size;\n protected parentShape: Shape | null = null;\n children: Shape[] = [];\n\n get bbox(): TSU.Geom.Rect {\n if (!this._bbox) {\n this._bbox = this.refreshBBox();\n }\n return this._bbox;\n }\n\n /**\n * Sizes can have a minimum size.\n * This is usually the size of the bounding box.\n */\n get minSize(): TSU.Geom.Size {\n if (!this._minSize) {\n this._minSize = this.refreshMinSize();\n }\n return this._minSize;\n }\n\n /**\n * refreshBBox is called by the Shape when it knows the bbox it is tracking\n * cannot be trusted and has to be refreshed by calling native methods.\n */\n protected abstract refreshBBox(): TSU.Geom.Rect;\n protected abstract refreshMinSize(): TSU.Geom.Size;\n protected abstract 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\n invalidateBounds(): void {\n this._minSize = null as unknown as TSU.Geom.Size;\n this._bbox = null as unknown as TSU.Geom.Rect;\n }\n\n /**\n * Sets the x or y coordinate of this shape in coordinate system within its\n * parent.\n *\n * Note that null and NaN are valid values and mean the following:\n * null - Dont change the value. Passed to \"ignore\" effects.\n * NaN - Ensure the value is set to null so that the bounding box specific coord is used going forward.\n */\n setBounds(\n x: number | null,\n y: number | null,\n w: number | null,\n h: number | null,\n applyLayout = false,\n ): [number | null, number | null, number | null, number | null] {\n if (x != null) {\n if (isNaN(x)) {\n this._x = null;\n } else {\n this._x = x;\n }\n }\n if (y != null) {\n if (isNaN(y)) {\n this._y = null;\n } else {\n this._y = y;\n }\n }\n if (w != null) {\n if (isNaN(w)) {\n this._width = null;\n } else {\n this._width = w;\n }\n }\n if (h != null) {\n if (isNaN(h)) {\n this._height = null;\n } else {\n this._height = h;\n }\n }\n const [nx, ny, nw, nh] = this.updateBounds(x, y, w, h);\n if (nx != null) {\n if (isNaN(nx)) {\n this._x = null;\n } else {\n this._x = nx;\n }\n }\n if (ny != null) {\n if (isNaN(ny)) {\n this._y = null;\n } else {\n this._y = ny;\n }\n }\n if (nw != null) {\n if (isNaN(nw)) {\n this._width = null;\n } else {\n this._width = nw;\n }\n }\n if (nh != null) {\n if (isNaN(nh)) {\n this._height = null;\n } else {\n this._height = nh;\n }\n }\n if (applyLayout) this.refreshLayout();\n // this.resetBBox();\n return [nx, ny, nw, nh];\n }\n\n get hasX(): boolean {\n return this._x != null && !isNaN(this._x);\n }\n\n get hasY(): boolean {\n return this._y != null && !isNaN(this._y);\n }\n\n get hasWidth(): boolean {\n return this._width != null && !isNaN(this._width);\n }\n\n get hasHeight(): boolean {\n return this._height != null && !isNaN(this._height);\n }\n\n /**\n * Gets the x coordinate within the parent's coordinate system.\n */\n get x(): number {\n return this._x || 0;\n }\n\n /**\n * Sets the x coordinate within the parent's coordinate system.\n */\n set x(x: number | null) {\n // Here a manual x is being set - how does this interfere with the bounding box?\n // We should _x to the new value to indicate a manual value was set.\n // and reset bbox so that based on this x a new bbox may need to be calculated\n this.setBounds(x == null ? NaN : x, null, null, null);\n }\n\n /**\n * Gets the y coordinate within the parent's coordinate system.\n */\n get y(): number {\n if (this._y != null) return this._y;\n return 0; // this.bbox.y;\n }\n\n /**\n * Sets the y coordinate within the parent's coordinate system.\n */\n set y(y: number | null) {\n this.setBounds(null, y == null ? NaN : y, null, null);\n }\n\n get width(): number {\n if (this._width != null) return this._width;\n return 0; // this.bbox.width;\n }\n\n set width(w: number | null) {\n this.setBounds(null, null, w == null ? NaN : w, null);\n }\n\n get height(): number {\n if (this._height != null) return this._height;\n return 0; // this.bbox.height;\n }\n\n set height(h: number | null) {\n this.setBounds(null, null, null, h == null ? NaN : h);\n }\n\n /**\n * This is called when bounds or other properties of a shape have changed to\n * give the shape an opportunity to layout the children. For shapes\n * with no children this is a no-op. It is expected the Shape will keep track\n * of all changes so it can apply them all in in one go in this method - A\n * form of \"commit\"ing the layout transaction.\n */\n refreshLayout(): void {\n // throw new Error(\"Implement this\");\n }\n}\n\nexport abstract class Embelishment extends Shape {}\n\nexport class ElementShape<T extends SVGGraphicsElement = SVGGraphicsElement> extends Shape {\n constructor(public readonly element: T) {\n super();\n }\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.element);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.element);\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 if (this.hasX) this.element.setAttribute(\"x\", \"\" + this._x);\n if (this.hasY) this.element.setAttribute(\"y\", \"\" + this._y);\n }\n}\n\nexport abstract class AtomView extends Shape {\n depth = 0;\n roleIndex = 0;\n\n // LayoutMetrics for the AtomView so all atomviews laid out on the\n // same baseline will show up aligned vertically\n baseline: number;\n ascent: number;\n descent: number;\n capHeight: number;\n leading: number;\n\n abstract isLeaf(): boolean;\n\n /**\n * Creates views needed for this AtomView.\n */\n abstract createElements(parent: SVGGraphicsElement): void;\n}\n\nexport abstract class LeafAtomView extends AtomView {\n constructor(public leafAtom: LeafAtom) {\n super();\n }\n\n isLeaf(): boolean {\n return true;\n }\n\n get viewId(): number {\n return this.leafAtom.uuid;\n }\n\n /*\n embRoot(): SVGGraphicsElement {\n let rootElem = this.glyph.element.parentElement as any as SVGGraphicsElement;\n while (rootElem && (rootElem.tagName == \"tspan\" || rootElem.tagName == \"text\")) {\n rootElem = rootElem.parentElement as any as SVGGraphicsElement;\n }\n return rootElem;\n }\n */\n}\n\n/**\n * An GroupView that contains a collection of AtomViews.\n */\nexport abstract class GroupView extends AtomView {\n protected atomSpacing: number;\n protected groupElement: SVGGElement;\n protected atomViews: AtomView[] = [];\n private _embelishments: Embelishment[];\n defaultToNotes = true;\n needsLayout = true;\n scaleFactor = 1.0;\n constructor(public group: Group, config?: any) {\n super();\n this.atomSpacing = 5;\n this.setStyles(config || {});\n }\n\n /**\n * Creates views needed for this AtomView.\n */\n createElements(parent: SVGGraphicsElement): void {\n this.groupElement = TSU.DOM.createSVGNode(\"g\", {\n parent: parent,\n attrs: {\n class: \"groupViewRoot\",\n id: \"groupViewRoot\" + this.group.uuid,\n },\n });\n\n // now create child atom views for each atom in this Group\n for (const atom of this.group.atoms.values()) {\n const atomView = this.createAtomView(atom);\n this.atomViews.push(atomView);\n }\n this.invalidateBounds();\n }\n\n isLeaf(): boolean {\n return false;\n }\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.groupElement);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n let totalWidth = 0;\n let maxHeight = 0;\n this.atomViews.forEach((av, index) => {\n const ms = av.minSize;\n totalWidth += ms.width + this.atomSpacing;\n maxHeight = Math.max(maxHeight, ms.height);\n });\n return new TSU.Geom.Size(totalWidth * this.scaleFactor, maxHeight * this.scaleFactor);\n }\n\n abstract createAtomView(atom: Atom): AtomView;\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 let transform = \"translate(\" + this.x + \",\" + this.y + \")\";\n if (this.scaleFactor < 1) {\n transform += \" scale(\" + this.scaleFactor + \")\";\n }\n this.groupElement.setAttribute(\"transform\", transform);\n // if (this.widthChanged) {\n // All our atoms have to be laid out between startX and endX\n // old way of doing where we just set dx between atom views\n // this worked when atomviews were single glyphs. But\n // as atomViews can be complex (eg with accents and pre/post\n // spaces etc) explicitly setting x/y may be important\n let currX = 0;\n const currY = 0; // null; // this.y; // + 10;\n this.atomViews.forEach((av, index) => {\n av.setBounds(currX, currY, null, null, true);\n currX += this.atomSpacing + av.minSize.width;\n });\n this.invalidateBounds();\n for (const e of this.embelishments) e.refreshLayout();\n this.invalidateBounds();\n }\n\n get embelishments(): Embelishment[] {\n if (!this._embelishments) {\n this._embelishments = this.createEmbelishments();\n }\n return this._embelishments;\n }\n\n protected createEmbelishments(): Embelishment[] {\n return [];\n }\n\n setStyles(config: any): void {\n if (\"atomSpacing\" in config) this.atomSpacing = config.atomSpacing;\n this.needsLayout = true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../src/shapes.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Atom, LeafAtom, Group } from \"./core\";\n\n/**\n * Base class of all renderable objects for caching things like bounding boxes etc.\n * We do this since a lot of the property setters dont change bounding boxes but\n * bounding box reads are a bit slow in general. This also allows us to test\n * layouts, positioning etc without having to worry about implementation details.\n */\nexport abstract class Shape {\n private static idCounter = 0;\n readonly shapeId: number = Shape.idCounter++;\n /**\n * Note that x and y coordinates are not always the x and y coordinates\n * of the bounding box.\n * Eg a circle's x and y coordinates are its center point and not the\n * top left corner.\n * These \"main\" coordinates are referred as control coordinates.\n */\n protected _x: number | null = null;\n protected _y: number | null = null;\n protected _width: number | null = null;\n protected _height: number | null = null;\n protected _bbox: TSU.Geom.Rect;\n protected _minSize: TSU.Geom.Size;\n protected parentShape: Shape | null = null;\n children: Shape[] = [];\n\n get bbox(): TSU.Geom.Rect {\n if (!this._bbox) {\n this._bbox = this.refreshBBox();\n }\n return this._bbox;\n }\n\n /**\n * Sizes can have a minimum size.\n * This is usually the size of the bounding box.\n */\n get minSize(): TSU.Geom.Size {\n if (!this._minSize) {\n this._minSize = this.refreshMinSize();\n }\n return this._minSize;\n }\n\n /**\n * refreshBBox is called by the Shape when it knows the bbox it is tracking\n * cannot be trusted and has to be refreshed by calling native methods.\n */\n protected abstract refreshBBox(): TSU.Geom.Rect;\n protected abstract refreshMinSize(): TSU.Geom.Size;\n protected abstract 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\n invalidateBounds(): void {\n this._minSize = null as unknown as TSU.Geom.Size;\n this._bbox = null as unknown as TSU.Geom.Rect;\n }\n\n /**\n * Sets the x or y coordinate of this shape in coordinate system within its\n * parent.\n *\n * Note that null and NaN are valid values and mean the following:\n * null - Dont change the value. Passed to \"ignore\" effects.\n * NaN - Ensure the value is set to null so that the bounding box specific coord is used going forward.\n */\n setBounds(\n x: number | null,\n y: number | null,\n w: number | null,\n h: number | null,\n applyLayout = false,\n ): [number | null, number | null, number | null, number | null] {\n if (x != null) {\n if (isNaN(x)) {\n this._x = null;\n } else {\n this._x = x;\n }\n }\n if (y != null) {\n if (isNaN(y)) {\n this._y = null;\n } else {\n this._y = y;\n }\n }\n if (w != null) {\n if (isNaN(w)) {\n this._width = null;\n } else {\n this._width = w;\n }\n }\n if (h != null) {\n if (isNaN(h)) {\n this._height = null;\n } else {\n this._height = h;\n }\n }\n const [nx, ny, nw, nh] = this.updateBounds(x, y, w, h);\n if (nx != null) {\n if (isNaN(nx)) {\n this._x = null;\n } else {\n this._x = nx;\n }\n }\n if (ny != null) {\n if (isNaN(ny)) {\n this._y = null;\n } else {\n this._y = ny;\n }\n }\n if (nw != null) {\n if (isNaN(nw)) {\n this._width = null;\n } else {\n this._width = nw;\n }\n }\n if (nh != null) {\n if (isNaN(nh)) {\n this._height = null;\n } else {\n this._height = nh;\n }\n }\n if (applyLayout) this.refreshLayout();\n // this.resetBBox();\n return [nx, ny, nw, nh];\n }\n\n get hasX(): boolean {\n return this._x != null && !isNaN(this._x);\n }\n\n get hasY(): boolean {\n return this._y != null && !isNaN(this._y);\n }\n\n get hasWidth(): boolean {\n return this._width != null && !isNaN(this._width);\n }\n\n get hasHeight(): boolean {\n return this._height != null && !isNaN(this._height);\n }\n\n /**\n * Gets the x coordinate within the parent's coordinate system.\n */\n get x(): number {\n return this._x || 0;\n }\n\n /**\n * Sets the x coordinate within the parent's coordinate system.\n */\n set x(x: number | null) {\n // Here a manual x is being set - how does this interfere with the bounding box?\n // We should _x to the new value to indicate a manual value was set.\n // and reset bbox so that based on this x a new bbox may need to be calculated\n this.setBounds(x == null ? NaN : x, null, null, null);\n }\n\n /**\n * Gets the y coordinate within the parent's coordinate system.\n */\n get y(): number {\n if (this._y != null) return this._y;\n return 0; // this.bbox.y;\n }\n\n /**\n * Sets the y coordinate within the parent's coordinate system.\n */\n set y(y: number | null) {\n this.setBounds(null, y == null ? NaN : y, null, null);\n }\n\n get width(): number {\n if (this._width != null) return this._width;\n return 0; // this.bbox.width;\n }\n\n set width(w: number | null) {\n this.setBounds(null, null, w == null ? NaN : w, null);\n }\n\n get height(): number {\n if (this._height != null) return this._height;\n return 0; // this.bbox.height;\n }\n\n set height(h: number | null) {\n this.setBounds(null, null, null, h == null ? NaN : h);\n }\n\n /**\n * This is called when bounds or other properties of a shape have changed to\n * give the shape an opportunity to layout the children. For shapes\n * with no children this is a no-op. It is expected the Shape will keep track\n * of all changes so it can apply them all in in one go in this method - A\n * form of \"commit\"ing the layout transaction.\n */\n refreshLayout(): void {\n // throw new Error(\"Implement this\");\n }\n}\n\nexport abstract class Embelishment extends Shape {}\n\nexport class ElementShape<T extends SVGGraphicsElement = SVGGraphicsElement> extends Shape {\n constructor(public readonly element: T) {\n super();\n }\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.element);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n return TSU.DOM.svgBBox(this.element);\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 if (this.hasX) this.element.setAttribute(\"x\", \"\" + this._x);\n if (this.hasY) this.element.setAttribute(\"y\", \"\" + this._y);\n }\n}\n\nexport abstract class AtomView extends Shape {\n depth = 0;\n roleIndex = 0;\n\n // LayoutMetrics for the AtomView so all atomviews laid out on the\n // same baseline will show up aligned vertically\n baseline: number;\n ascent: number;\n descent: number;\n capHeight: number;\n leading: number;\n\n abstract isLeaf(): boolean;\n\n /**\n * Creates views needed for this AtomView.\n */\n abstract createElements(parent: SVGGraphicsElement): void;\n}\n\nexport abstract class LeafAtomView extends AtomView {\n constructor(public leafAtom: LeafAtom) {\n super();\n }\n\n isLeaf(): boolean {\n return true;\n }\n\n get viewId(): number {\n return this.leafAtom.uuid;\n }\n\n /*\n embRoot(): SVGGraphicsElement {\n let rootElem = this.glyph.element.parentElement as any as SVGGraphicsElement;\n while (rootElem && (rootElem.tagName == \"tspan\" || rootElem.tagName == \"text\")) {\n rootElem = rootElem.parentElement as any as SVGGraphicsElement;\n }\n return rootElem;\n }\n */\n}\n\n/**\n * An GroupView that contains a collection of AtomViews.\n */\nexport abstract class GroupView extends AtomView {\n protected atomSpacing: number;\n protected groupElement: SVGGElement;\n protected atomViews: AtomView[] = [];\n private _embelishments: Embelishment[];\n defaultToNotes = true;\n needsLayout = true;\n scaleFactor = 1.0;\n constructor(public group: Group, config?: any) {\n super();\n this.atomSpacing = 5;\n this.setStyles(config || {});\n }\n\n /**\n * Creates views needed for this AtomView.\n */\n createElements(parent: SVGGraphicsElement): void {\n this.groupElement = TSU.DOM.createSVGNode(\"g\", {\n parent: parent,\n attrs: {\n class: \"groupViewRoot\",\n id: \"groupViewRoot\" + this.group.uuid,\n },\n });\n\n // now create child atom views for each atom in this Group\n for (const atom of this.group.atoms.values()) {\n const atomView = this.createAtomView(atom);\n this.atomViews.push(atomView);\n }\n this.invalidateBounds();\n }\n\n isLeaf(): boolean {\n return false;\n }\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.groupElement);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n let totalWidth = 0;\n let maxHeight = 0;\n this.atomViews.forEach((av, index) => {\n const ms = av.minSize;\n totalWidth += ms.width + this.atomSpacing;\n maxHeight = Math.max(maxHeight, ms.height);\n });\n return new TSU.Geom.Size(totalWidth * this.scaleFactor, maxHeight * this.scaleFactor);\n }\n\n abstract createAtomView(atom: Atom): AtomView;\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 let transform = \"translate(\" + this.x + \",\" + this.y + \")\";\n if (this.scaleFactor < 1) {\n transform += \" scale(\" + this.scaleFactor + \")\";\n }\n this.groupElement.setAttribute(\"transform\", transform);\n // if (this.widthChanged) {\n // All our atoms have to be laid out between startX and endX\n // old way of doing where we just set dx between atom views\n // this worked when atomviews were single glyphs. But\n // as atomViews can be complex (eg with accents and pre/post\n // spaces etc) explicitly setting x/y may be important\n let currX = 0;\n const currY = 0; // null; // this.y; // + 10;\n this.atomViews.forEach((av, index) => {\n av.setBounds(currX, currY, null, null, true);\n currX += this.atomSpacing + av.minSize.width;\n });\n this.invalidateBounds();\n for (const e of this.embelishments) e.refreshLayout();\n this.invalidateBounds();\n }\n\n get embelishments(): Embelishment[] {\n if (!this._embelishments) {\n this._embelishments = this.createEmbelishments();\n }\n return this._embelishments;\n }\n\n protected createEmbelishments(): Embelishment[] {\n return [];\n }\n\n setStyles(config: any): void {\n if (\"atomSpacing\" in config) this.atomSpacing = config.atomSpacing;\n this.needsLayout = true;\n }\n}\n"]}
|
package/lib/esm/utils.d.ts
CHANGED
|
@@ -5,3 +5,11 @@ export declare function parseCycle(cycleStr: string): Cycle;
|
|
|
5
5
|
export declare function parseBar(barStr: string): Bar;
|
|
6
6
|
export declare function parseSyllable(value: string): Atom;
|
|
7
7
|
export declare function parseProperty(line: string): [string, string];
|
|
8
|
+
export declare class SparseArray<T> {
|
|
9
|
+
runs: [number, T[]][];
|
|
10
|
+
get length(): number;
|
|
11
|
+
valueAt(index: number, creator?: () => any): any;
|
|
12
|
+
setAt(index: number, ...values: (T | null)[]): this;
|
|
13
|
+
removeAt(index: number, count?: number): this;
|
|
14
|
+
splice(index: number, numToDelete: number, ...valuesToInsert: (T | null)[]): this;
|
|
15
|
+
}
|
package/lib/esm/utils.js
CHANGED
|
@@ -1,38 +1,13 @@
|
|
|
1
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
-
if (!m) return o;
|
|
4
|
-
var i = m.call(o), r, ar = [], e;
|
|
5
|
-
try {
|
|
6
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
-
}
|
|
8
|
-
catch (error) { e = { error: error }; }
|
|
9
|
-
finally {
|
|
10
|
-
try {
|
|
11
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
-
}
|
|
13
|
-
finally { if (e) throw e.error; }
|
|
14
|
-
}
|
|
15
|
-
return ar;
|
|
16
|
-
};
|
|
17
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
-
if (ar || !(i in from)) {
|
|
20
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
-
ar[i] = from[i];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
-
};
|
|
26
1
|
import * as TSU from "@panyam/tsutils";
|
|
27
2
|
import { Space, Group, Syllable } from "./core";
|
|
28
3
|
import { Cycle, Bar } from "./cycle";
|
|
29
|
-
|
|
4
|
+
const ONE = TSU.Num.Fraction.ONE;
|
|
30
5
|
export function cycleStrToBarsStrs(cycleStr) {
|
|
31
6
|
return cycleStr
|
|
32
7
|
.replace(/\|+/g, "|")
|
|
33
8
|
.split("|")
|
|
34
|
-
.map(
|
|
35
|
-
.filter(
|
|
9
|
+
.map((x) => x.trim())
|
|
10
|
+
.filter((x) => x.length > 0);
|
|
36
11
|
}
|
|
37
12
|
export function parseCycle(cycleStr) {
|
|
38
13
|
return new Cycle({
|
|
@@ -40,17 +15,17 @@ export function parseCycle(cycleStr) {
|
|
|
40
15
|
});
|
|
41
16
|
}
|
|
42
17
|
export function parseBar(barStr) {
|
|
43
|
-
|
|
44
|
-
|
|
18
|
+
const bars = barStr.replace(/\s+/g, " ").split(" ");
|
|
19
|
+
const cp = new Bar();
|
|
45
20
|
if (bars.length == 1) {
|
|
46
|
-
for (
|
|
47
|
-
|
|
48
|
-
|
|
21
|
+
for (let i = 0; i < barStr.length; i++) {
|
|
22
|
+
let count = 0;
|
|
23
|
+
const ch = barStr[i];
|
|
49
24
|
if (ch == ",") {
|
|
50
25
|
count = 1;
|
|
51
26
|
}
|
|
52
27
|
else {
|
|
53
|
-
|
|
28
|
+
const num = parseInt(ch);
|
|
54
29
|
if (num) {
|
|
55
30
|
count = num;
|
|
56
31
|
}
|
|
@@ -62,20 +37,20 @@ export function parseBar(barStr) {
|
|
|
62
37
|
}
|
|
63
38
|
}
|
|
64
39
|
else {
|
|
65
|
-
for (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (
|
|
40
|
+
for (let i = 0; i < bars.length; i++) {
|
|
41
|
+
const comps = bars[i].split(":");
|
|
42
|
+
const length = comps[0];
|
|
43
|
+
const count = comps[1] || "";
|
|
44
|
+
if (length.length == 0) {
|
|
70
45
|
cp.beatLengths.push(TSU.Num.Frac(1));
|
|
71
46
|
}
|
|
72
|
-
else if (/^,+$/.test(
|
|
73
|
-
cp.beatLengths.push(TSU.Num.Frac(
|
|
47
|
+
else if (/^,+$/.test(length)) {
|
|
48
|
+
cp.beatLengths.push(TSU.Num.Frac(length.length));
|
|
74
49
|
}
|
|
75
50
|
else {
|
|
76
|
-
cp.beatLengths.push(TSU.Num.Fraction.parse(
|
|
51
|
+
cp.beatLengths.push(TSU.Num.Fraction.parse(length));
|
|
77
52
|
}
|
|
78
|
-
|
|
53
|
+
const beatCount = parseInt(count);
|
|
79
54
|
if (isNaN(beatCount)) {
|
|
80
55
|
cp.beatCounts.push(1);
|
|
81
56
|
}
|
|
@@ -87,9 +62,9 @@ export function parseBar(barStr) {
|
|
|
87
62
|
return cp;
|
|
88
63
|
}
|
|
89
64
|
export function parseSyllable(value) {
|
|
90
|
-
|
|
91
|
-
for (
|
|
92
|
-
|
|
65
|
+
const notes = [];
|
|
66
|
+
for (let i = 0; i < value.length;) {
|
|
67
|
+
let ch = value[i];
|
|
93
68
|
if (ch == "_") {
|
|
94
69
|
notes.push(new Space(ONE, true));
|
|
95
70
|
i++;
|
|
@@ -99,7 +74,7 @@ export function parseSyllable(value) {
|
|
|
99
74
|
i++;
|
|
100
75
|
}
|
|
101
76
|
else {
|
|
102
|
-
|
|
77
|
+
let syll = "";
|
|
103
78
|
while (i < value.length && ch != "," && ch != "_") {
|
|
104
79
|
syll += ch;
|
|
105
80
|
i++;
|
|
@@ -110,15 +85,44 @@ export function parseSyllable(value) {
|
|
|
110
85
|
}
|
|
111
86
|
if (notes.length == 1)
|
|
112
87
|
return notes[0];
|
|
113
|
-
return new
|
|
88
|
+
return new Group(...notes);
|
|
114
89
|
}
|
|
115
90
|
export function parseProperty(line) {
|
|
116
|
-
|
|
91
|
+
const bars = line.split("=").map((x) => x.trim());
|
|
117
92
|
if (bars.length < 2) {
|
|
118
93
|
throw new Error("Properties must be of type <key> = <value>");
|
|
119
94
|
}
|
|
120
|
-
|
|
121
|
-
|
|
95
|
+
const key = bars[0];
|
|
96
|
+
const value = bars[1];
|
|
122
97
|
return [key, value];
|
|
123
98
|
}
|
|
99
|
+
export class SparseArray {
|
|
100
|
+
constructor() {
|
|
101
|
+
this.runs = [];
|
|
102
|
+
}
|
|
103
|
+
get length() {
|
|
104
|
+
let out = 0;
|
|
105
|
+
for (const [, vals] of this.runs) {
|
|
106
|
+
out += vals.length;
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
valueAt(index, creator) {
|
|
111
|
+
let out = null;
|
|
112
|
+
if (out == null && creator) {
|
|
113
|
+
out = creator();
|
|
114
|
+
this.setAt(index, out);
|
|
115
|
+
}
|
|
116
|
+
return out;
|
|
117
|
+
}
|
|
118
|
+
setAt(index, ...values) {
|
|
119
|
+
return this.splice(index, values.length, ...values);
|
|
120
|
+
}
|
|
121
|
+
removeAt(index, count = 1) {
|
|
122
|
+
return this.splice(index, count);
|
|
123
|
+
}
|
|
124
|
+
splice(index, numToDelete, ...valuesToInsert) {
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
124
128
|
//# sourceMappingURL=utils.js.map
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAQ,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACrC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAYjC,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,QAAQ;SACZ,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,KAAK,CAAC;QACf,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAmBD,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,EAAE,IAAI,GAAG,EAAE;gBACb,KAAK,GAAG,CAAC,CAAC;aACX;iBAAM;gBACL,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,GAAG,EAAE;oBACP,KAAK,GAAG,GAAG,CAAC;iBACb;aACF;YACD,OAAO,KAAK,GAAG,CAAC,EAAE;gBAChB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,KAAK,EAAE,CAAC;aACT;SACF;KACF;SAAM;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;gBACtB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;aAClD;iBAAM;gBAEL,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aACrD;YAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;gBACpB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;iBAAM;gBACL,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B;SACF;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,EAAY,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI;QAClC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,EAAE;YACb,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACjC,CAAC,EAAE,CAAC;SACL;aAAM,IAAI,EAAE,IAAI,GAAG,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAClC,CAAC,EAAE,CAAC;SACL;aAAM;YACL,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE;gBACjD,IAAI,IAAI,EAAE,CAAC;gBACX,CAAC,EAAE,CAAC;gBACJ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;aACf;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;SAChC;KACF;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAOD,MAAM,OAAO,WAAW;IAAxB;QACE,SAAI,GAAoB,EAAE,CAAC;IAqC7B,CAAC;IAnCC,IAAI,MAAM;QACR,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAChC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;SACpB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,OAAO,CAAC,KAAa,EAAE,OAAmB;QACxC,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,EAAE;YAE1B,GAAG,GAAG,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,GAAG,MAAoB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,WAAmB,EAAE,GAAG,cAA4B;QAExE,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Atom, Space, Group, Syllable } from \"./core\";\nimport { Cycle, Bar } from \"./cycle\";\nconst ONE = TSU.Num.Fraction.ONE;\n\n/**\n * Convert a cycle given as a string into the bars representing\n * each of its cycle bars.\n *\n * Essentially a list of bars can be specified by the \"|\" delimited string:\n *\n * <bar1>|<bar2>|<bar3>....|<barN>\n *\n * Empty bars are ignored.\n */\nexport function cycleStrToBarsStrs(cycleStr: string): string[] {\n return cycleStr\n .replace(/\\|+/g, \"|\")\n .split(\"|\")\n .map((x) => x.trim())\n .filter((x) => x.length > 0);\n}\n\n/**\n * Parse a tala pattern string.\n */\nexport function parseCycle(cycleStr: string): Cycle {\n return new Cycle({\n bars: cycleStrToBarsStrs(cycleStr).map(parseBar),\n });\n}\n\n/**\n * Parse a cycle part string into beat lengths.\n *\n * A bar string is a space delimited string in the following format:\n *\n * \"<beat1> <spaces> <beat2> .... <beatN>\"\n *\n * beatX substring cannot contain \"|\" or spaces.\n *\n * Each Beat string is in the following format:\n *\n * \"<length>(:<count>)?\" or \"<length>?:<count>\"\n *\n * Both length and count are optional but atleast one of them must be specified.\n * When not specified the other defaults to 1.\n * Lenght can also be a fraction of the form <num>\"/\"<den> (without spaces).\n */\nexport function parseBar(barStr: string): Bar {\n const bars = barStr.replace(/\\s+/g, \" \").split(\" \");\n const cp = new Bar();\n if (bars.length == 1) {\n for (let i = 0; i < barStr.length; i++) {\n let count = 0;\n const ch = barStr[i];\n if (ch == \",\") {\n count = 1;\n } else {\n const num = parseInt(ch);\n if (num) {\n count = num;\n }\n }\n while (count > 0) {\n cp.beatLengths.push(ONE);\n count--;\n }\n }\n } else {\n for (let i = 0; i < bars.length; i++) {\n const comps = bars[i].split(\":\");\n const length = comps[0];\n const count = comps[1] || \"\";\n if (length.length == 0) {\n cp.beatLengths.push(TSU.Num.Frac(1));\n } else if (/^,+$/.test(length)) {\n cp.beatLengths.push(TSU.Num.Frac(length.length));\n } else {\n // parse length as a number or as a fraction\n cp.beatLengths.push(TSU.Num.Fraction.parse(length));\n }\n\n // Now the count\n const beatCount = parseInt(count);\n if (isNaN(beatCount)) {\n cp.beatCounts.push(1);\n } else {\n cp.beatCounts.push(beatCount);\n }\n }\n }\n return cp;\n}\n\nexport function parseSyllable(value: string): Atom {\n const notes = [] as Atom[];\n // Only \"_\" make a difference here\n for (let i = 0; i < value.length; ) {\n let ch = value[i];\n if (ch == \"_\") {\n notes.push(new Space(ONE, true));\n i++;\n } else if (ch == \",\") {\n notes.push(new Space(ONE, false));\n i++;\n } else {\n let syll = \"\";\n while (i < value.length && ch != \",\" && ch != \"_\") {\n syll += ch;\n i++;\n ch = value[i];\n }\n notes.push(new Syllable(syll));\n }\n }\n if (notes.length == 1) return notes[0];\n return new Group(...notes);\n}\n\nexport function parseProperty(line: string): [string, string] {\n const bars = line.split(\"=\").map((x) => x.trim());\n if (bars.length < 2) {\n throw new Error(\"Properties must be of type <key> = <value>\");\n }\n const key = bars[0];\n const value = bars[1];\n return [key, value];\n}\n\n/**\n * NOT YET IMPLEMENTED\n * A sparse array type which is optimized for \"holes\" while not penalizing\n * runs of values.\n */\nexport class SparseArray<T> {\n runs: [number, T[]][] = [];\n\n get length(): number {\n let out = 0;\n for (const [, vals] of this.runs) {\n out += vals.length;\n }\n return out;\n }\n\n /**\n * Returns the value at a given index.\n * If the value does not exist an optional creator method can be passed\n * to ensure that this value is also created and set at the given index\n */\n valueAt(index: number, creator?: () => any): any {\n let out = null;\n if (out == null && creator) {\n // wasnt found\n out = creator();\n this.setAt(index, out);\n }\n return out;\n }\n\n setAt(index: number, ...values: (T | null)[]): this {\n return this.splice(index, values.length, ...values);\n }\n\n removeAt(index: number, count = 1): this {\n return this.splice(index, count);\n }\n\n splice(index: number, numToDelete: number, ...valuesToInsert: (T | null)[]) {\n //\n return this;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "notations",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.49",
|
|
4
4
|
"author": "Sriram Panyam",
|
|
5
5
|
"description": "A package for modelling, parsing, laying out carnatic musical notation",
|
|
6
6
|
"homepage": "https://github.com/panyam/notations#readme",
|
|
@@ -25,11 +25,12 @@
|
|
|
25
25
|
"url": "https://github.com/panyam/notations/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
+
"@lume/kiwi": "^0.1.0",
|
|
28
29
|
"@panyam/tsutils": "*",
|
|
29
30
|
"galore": "*"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
|
-
"@babel/core": "^7.17.
|
|
33
|
+
"@babel/core": "^7.17.9",
|
|
33
34
|
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
34
35
|
"@babel/plugin-proposal-object-rest-spread": "^7.17.3",
|
|
35
36
|
"@babel/preset-flow": "^7.16.7",
|
|
@@ -37,32 +38,32 @@
|
|
|
37
38
|
"@types/ace": "^0.0.48",
|
|
38
39
|
"@types/jest": "^27.4.1",
|
|
39
40
|
"@types/request": "^2.48.8",
|
|
40
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
41
|
-
"@typescript-eslint/parser": "^5.
|
|
42
|
-
"autoprefixer": "^10.4.
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.21.0",
|
|
42
|
+
"@typescript-eslint/parser": "^5.21.0",
|
|
43
|
+
"autoprefixer": "^10.4.5",
|
|
43
44
|
"babel-core": "^6.26.3",
|
|
44
|
-
"babel-jest": "^27.
|
|
45
|
-
"babel-loader": "^8.2.
|
|
45
|
+
"babel-jest": "^27.1.4",
|
|
46
|
+
"babel-loader": "^8.2.5",
|
|
46
47
|
"babel-preset-env": "^1.7.0",
|
|
47
48
|
"browserify": "17.0.0",
|
|
48
49
|
"codecov": "^3.8.3",
|
|
49
|
-
"eslint": "^8.
|
|
50
|
+
"eslint": "^8.14.0",
|
|
50
51
|
"eslint-config-prettier": "^8.5.0",
|
|
51
52
|
"eslint-plugin-prettier": "^4.0.0",
|
|
52
|
-
"highlight.js": "11.
|
|
53
|
-
"jest": "^27.
|
|
54
|
-
"jest-each": "^
|
|
55
|
-
"jest-mock": "^
|
|
53
|
+
"highlight.js": "11.5.1",
|
|
54
|
+
"jest": "^27.1.4",
|
|
55
|
+
"jest-each": "^28.0.1",
|
|
56
|
+
"jest-mock": "^28.0.1",
|
|
56
57
|
"jsdom": "^19.0.0",
|
|
57
58
|
"npm-run-all": "^4.1.5",
|
|
58
59
|
"postcss-cli": "^9.1.0",
|
|
59
60
|
"pre-commit": "^1.2.2",
|
|
60
|
-
"prettier": "^2.
|
|
61
|
-
"ts-jest": "^27.1.
|
|
62
|
-
"typedoc": "^0.22.
|
|
63
|
-
"typescript": "^4.6.
|
|
61
|
+
"prettier": "^2.6.2",
|
|
62
|
+
"ts-jest": "^27.1.4",
|
|
63
|
+
"typedoc": "^0.22.15",
|
|
64
|
+
"typescript": "^4.6.3",
|
|
64
65
|
"typescript-tslint-plugin": "^1.0.1",
|
|
65
|
-
"webpack": "^5.
|
|
66
|
+
"webpack": "^5.72.0",
|
|
66
67
|
"webpack-cli": "^4.9.2"
|
|
67
68
|
},
|
|
68
69
|
"pre-commit": [
|