notations 0.0.47 → 0.0.50

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.
Files changed (113) hide show
  1. package/lib/cjs/beats.d.ts +34 -69
  2. package/lib/cjs/beats.js +178 -439
  3. package/lib/cjs/beats.js.map +1 -1
  4. package/lib/cjs/beatutils.d.ts +3 -0
  5. package/lib/cjs/beatutils.js +64 -0
  6. package/lib/cjs/beatutils.js.map +1 -0
  7. package/lib/cjs/beatview.d.ts +18 -0
  8. package/lib/cjs/beatview.js +62 -0
  9. package/lib/cjs/beatview.js.map +1 -0
  10. package/lib/cjs/carnatic/LineView.d.ts +2 -7
  11. package/lib/cjs/carnatic/LineView.js +13 -31
  12. package/lib/cjs/carnatic/LineView.js.map +1 -1
  13. package/lib/cjs/carnatic/NotationView.d.ts +8 -7
  14. package/lib/cjs/carnatic/NotationView.js +73 -153
  15. package/lib/cjs/carnatic/NotationView.js.map +1 -1
  16. package/lib/cjs/carnatic/atomviews.js +149 -287
  17. package/lib/cjs/carnatic/atomviews.js.map +1 -1
  18. package/lib/cjs/carnatic/beatviews.d.ts +4 -13
  19. package/lib/cjs/carnatic/beatviews.js +23 -118
  20. package/lib/cjs/carnatic/beatviews.js.map +1 -1
  21. package/lib/cjs/carnatic/embelishments.d.ts +1 -1
  22. package/lib/cjs/carnatic/embelishments.js +189 -283
  23. package/lib/cjs/carnatic/embelishments.js.map +1 -1
  24. package/lib/cjs/carnatic/gamakas.js +15 -47
  25. package/lib/cjs/carnatic/gamakas.js.map +1 -1
  26. package/lib/cjs/commands.js +111 -271
  27. package/lib/cjs/commands.js.map +1 -1
  28. package/lib/cjs/core.d.ts +14 -1
  29. package/lib/cjs/core.js +291 -477
  30. package/lib/cjs/core.js.map +1 -1
  31. package/lib/cjs/cycle.js +175 -367
  32. package/lib/cjs/cycle.js.map +1 -1
  33. package/lib/cjs/entity.js +48 -102
  34. package/lib/cjs/entity.js.map +1 -1
  35. package/lib/cjs/grids.d.ts +125 -0
  36. package/lib/cjs/grids.js +550 -0
  37. package/lib/cjs/grids.js.map +1 -0
  38. package/lib/cjs/iterators.js +96 -234
  39. package/lib/cjs/iterators.js.map +1 -1
  40. package/lib/cjs/layouts.d.ts +1 -1
  41. package/lib/cjs/layouts.js +62 -98
  42. package/lib/cjs/layouts.js.map +1 -1
  43. package/lib/cjs/loader.d.ts +2 -2
  44. package/lib/cjs/loader.js +23 -123
  45. package/lib/cjs/loader.js.map +1 -1
  46. package/lib/cjs/notation.d.ts +0 -3
  47. package/lib/cjs/notation.js +139 -241
  48. package/lib/cjs/notation.js.map +1 -1
  49. package/lib/cjs/parser.d.ts +2 -0
  50. package/lib/cjs/parser.js +230 -214
  51. package/lib/cjs/parser.js.map +1 -1
  52. package/lib/cjs/shapes.js +149 -283
  53. package/lib/cjs/shapes.js.map +1 -1
  54. package/lib/cjs/utils.d.ts +8 -0
  55. package/lib/cjs/utils.js +60 -55
  56. package/lib/cjs/utils.js.map +1 -1
  57. package/lib/esm/beats.d.ts +34 -69
  58. package/lib/esm/beats.js +172 -438
  59. package/lib/esm/beats.js.map +1 -1
  60. package/lib/esm/beatutils.d.ts +3 -0
  61. package/lib/esm/beatutils.js +37 -0
  62. package/lib/esm/beatutils.js.map +1 -0
  63. package/lib/esm/beatview.d.ts +18 -0
  64. package/lib/esm/beatview.js +35 -0
  65. package/lib/esm/beatview.js.map +1 -0
  66. package/lib/esm/carnatic/LineView.d.ts +2 -7
  67. package/lib/esm/carnatic/LineView.js +12 -31
  68. package/lib/esm/carnatic/LineView.js.map +1 -1
  69. package/lib/esm/carnatic/NotationView.d.ts +8 -7
  70. package/lib/esm/carnatic/NotationView.js +71 -152
  71. package/lib/esm/carnatic/NotationView.js.map +1 -1
  72. package/lib/esm/carnatic/atomviews.js +144 -284
  73. package/lib/esm/carnatic/atomviews.js.map +1 -1
  74. package/lib/esm/carnatic/beatviews.d.ts +4 -13
  75. package/lib/esm/carnatic/beatviews.js +21 -94
  76. package/lib/esm/carnatic/beatviews.js.map +1 -1
  77. package/lib/esm/carnatic/embelishments.d.ts +1 -1
  78. package/lib/esm/carnatic/embelishments.js +187 -296
  79. package/lib/esm/carnatic/embelishments.js.map +1 -1
  80. package/lib/esm/carnatic/gamakas.js +14 -48
  81. package/lib/esm/carnatic/gamakas.js.map +1 -1
  82. package/lib/esm/commands.js +100 -271
  83. package/lib/esm/commands.js.map +1 -1
  84. package/lib/esm/core.d.ts +14 -1
  85. package/lib/esm/core.js +287 -484
  86. package/lib/esm/core.js.map +1 -1
  87. package/lib/esm/cycle.js +172 -367
  88. package/lib/esm/cycle.js.map +1 -1
  89. package/lib/esm/entity.js +48 -104
  90. package/lib/esm/entity.js.map +1 -1
  91. package/lib/esm/grids.d.ts +125 -0
  92. package/lib/esm/grids.js +517 -0
  93. package/lib/esm/grids.js.map +1 -0
  94. package/lib/esm/iterators.js +93 -235
  95. package/lib/esm/iterators.js.map +1 -1
  96. package/lib/esm/layouts.d.ts +1 -1
  97. package/lib/esm/layouts.js +60 -97
  98. package/lib/esm/layouts.js.map +1 -1
  99. package/lib/esm/loader.d.ts +2 -2
  100. package/lib/esm/loader.js +20 -120
  101. package/lib/esm/loader.js.map +1 -1
  102. package/lib/esm/notation.d.ts +0 -3
  103. package/lib/esm/notation.js +135 -242
  104. package/lib/esm/notation.js.map +1 -1
  105. package/lib/esm/parser.d.ts +2 -0
  106. package/lib/esm/parser.js +225 -210
  107. package/lib/esm/parser.js.map +1 -1
  108. package/lib/esm/shapes.js +148 -288
  109. package/lib/esm/shapes.js.map +1 -1
  110. package/lib/esm/utils.d.ts +8 -0
  111. package/lib/esm/utils.js +55 -51
  112. package/lib/esm/utils.js.map +1 -1
  113. package/package.json +18 -17
@@ -1,30 +1,4 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __assign = (this && this.__assign) || function () {
18
- __assign = Object.assign || function(t) {
19
- for (var s, i = 1, n = arguments.length; i < n; i++) {
20
- s = arguments[i];
21
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
- t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
3
  if (k2 === undefined) k2 = k;
30
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -48,215 +22,145 @@ var __importStar = (this && this.__importStar) || function (mod) {
48
22
  __setModuleDefault(result, mod);
49
23
  return result;
50
24
  };
51
- var __values = (this && this.__values) || function(o) {
52
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
53
- if (m) return m.call(o);
54
- if (o && typeof o.length === "number") return {
55
- next: function () {
56
- if (o && i >= o.length) o = void 0;
57
- return { value: o && o[i++], done: !o };
58
- }
59
- };
60
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
61
- };
62
25
  Object.defineProperty(exports, "__esModule", { value: true });
63
26
  exports.createAtomView = exports.LeafAtomView = exports.GroupView = void 0;
64
- var TSU = __importStar(require("@panyam/tsutils"));
65
- var core_1 = require("../core");
66
- var shapes_1 = require("../shapes");
67
- var embelishments_1 = require("./embelishments");
68
- var gamakas_1 = require("./gamakas");
69
- var GroupView = (function (_super) {
70
- __extends(GroupView, _super);
71
- function GroupView() {
72
- return _super !== null && _super.apply(this, arguments) || this;
73
- }
74
- GroupView.prototype.createAtomView = function (atom) {
27
+ const TSU = __importStar(require("@panyam/tsutils"));
28
+ const core_1 = require("../core");
29
+ const shapes_1 = require("../shapes");
30
+ const embelishments_1 = require("./embelishments");
31
+ const gamakas_1 = require("./gamakas");
32
+ class GroupView extends shapes_1.GroupView {
33
+ createAtomView(atom) {
75
34
  return createAtomView(this.groupElement, atom, this.defaultToNotes, 0.7);
76
- };
77
- return GroupView;
78
- }(shapes_1.GroupView));
35
+ }
36
+ }
79
37
  exports.GroupView = GroupView;
80
- var LeafAtomView = (function (_super) {
81
- __extends(LeafAtomView, _super);
82
- function LeafAtomView() {
83
- var _this = _super !== null && _super.apply(this, arguments) || this;
84
- _this.leftSlot = [];
85
- _this.topSlot = [];
86
- _this.rightSlot = [];
87
- _this.bottomSlot = [];
88
- return _this;
38
+ class LeafAtomView extends shapes_1.LeafAtomView {
39
+ constructor() {
40
+ super(...arguments);
41
+ this.leftSlot = [];
42
+ this.topSlot = [];
43
+ this.rightSlot = [];
44
+ this.bottomSlot = [];
89
45
  }
90
- LeafAtomView.prototype.refreshBBox = function () {
46
+ refreshBBox() {
91
47
  return TSU.DOM.svgBBox(this.rootGroup.element);
92
- };
93
- LeafAtomView.prototype.refreshMinSize = function () {
94
- var out = __assign({}, this.rootText.minSize);
95
- var totalWidth = this.leftSlot.reduce(function (a, b) { return a + b.minSize.width; }, 0) +
96
- this.rightSlot.reduce(function (a, b) { return a + b.minSize.width; }, 0) +
48
+ }
49
+ refreshMinSize() {
50
+ const out = Object.assign({}, this.rootText.minSize);
51
+ const totalWidth = this.leftSlot.reduce((a, b) => a + b.minSize.width, 0) +
52
+ this.rightSlot.reduce((a, b) => a + b.minSize.width, 0) +
97
53
  this.leftSlot.length +
98
54
  this.rightSlot.length;
99
- var totalHeight = this.topSlot.reduce(function (a, b) { return a + b.minSize.height; }, 0) +
100
- this.bottomSlot.reduce(function (a, b) { return a + b.minSize.height; }, 0);
55
+ const totalHeight = this.topSlot.reduce((a, b) => a + b.minSize.height, 0) +
56
+ this.bottomSlot.reduce((a, b) => a + b.minSize.height, 0);
101
57
  out.width += totalWidth;
102
58
  out.height += totalHeight;
103
59
  return out;
104
- };
105
- LeafAtomView.prototype.updateBounds = function (x, y, w, h) {
60
+ }
61
+ updateBounds(x, y, w, h) {
106
62
  return [x, y, NaN, NaN];
107
- };
108
- LeafAtomView.prototype.layoutElements = function () {
109
- var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
110
- var textSize = this.rootText.minSize;
111
- var currX = 0;
112
- var currY = this.hasY ? this.y : 0;
113
- try {
114
- for (var _e = __values(this.leftSlot), _f = _e.next(); !_f.done; _f = _e.next()) {
115
- var emb = _f.value;
116
- emb.x = currX;
117
- emb.refreshLayout();
118
- currX += emb.minSize.width + 1;
119
- }
120
- }
121
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
122
- finally {
123
- try {
124
- if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
125
- }
126
- finally { if (e_1) throw e_1.error; }
63
+ }
64
+ layoutElements() {
65
+ const textSize = this.rootText.minSize;
66
+ let currX = 0;
67
+ let currY = this.hasY ? this.y : 0;
68
+ for (const emb of this.leftSlot) {
69
+ emb.x = currX;
70
+ emb.refreshLayout();
71
+ currX += emb.minSize.width + 1;
127
72
  }
128
- var textX = currX;
73
+ const textX = currX;
129
74
  this.rootText.x = currX;
130
75
  this.rootText.refreshLayout();
131
76
  currX += this.rootText.minSize.width;
132
- try {
133
- for (var _g = __values(this.rightSlot), _h = _g.next(); !_h.done; _h = _g.next()) {
134
- var emb = _h.value;
135
- emb.x = currX;
136
- emb.refreshLayout();
137
- currX += emb.minSize.width + 1;
138
- }
139
- }
140
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
141
- finally {
142
- try {
143
- if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
144
- }
145
- finally { if (e_2) throw e_2.error; }
77
+ for (const emb of this.rightSlot) {
78
+ emb.x = currX;
79
+ emb.refreshLayout();
80
+ currX += emb.minSize.width + 1;
146
81
  }
147
- var gminSize = this.glyph.minSize;
148
- var glyphX = textX + this.glyph.x;
149
- var glyphY = this.glyph.y;
82
+ const gminSize = this.glyph.minSize;
83
+ const glyphX = textX + this.glyph.x;
84
+ const glyphY = this.glyph.y;
150
85
  currY = glyphY - this.glyph.minSize.height + 5;
151
- try {
152
- for (var _j = __values(this.topSlot), _k = _j.next(); !_k.done; _k = _j.next()) {
153
- var emb = _k.value;
154
- var bb = emb.minSize;
155
- emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY - bb.height, null, null, true);
156
- currY = emb.y;
157
- }
158
- }
159
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
160
- finally {
161
- try {
162
- if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
163
- }
164
- finally { if (e_3) throw e_3.error; }
86
+ for (const emb of this.topSlot) {
87
+ const bb = emb.minSize;
88
+ emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY - bb.height, null, null, true);
89
+ currY = emb.y;
165
90
  }
166
91
  currY = glyphY + 7;
167
- try {
168
- for (var _l = __values(this.bottomSlot), _m = _l.next(); !_m.done; _m = _l.next()) {
169
- var emb = _m.value;
170
- var bb = emb.minSize;
171
- emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY, null, null, true);
172
- currY = emb.y + bb.height;
173
- }
174
- }
175
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
176
- finally {
177
- try {
178
- if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
179
- }
180
- finally { if (e_4) throw e_4.error; }
92
+ for (const emb of this.bottomSlot) {
93
+ const bb = emb.minSize;
94
+ emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY, null, null, true);
95
+ currY = emb.y + bb.height;
181
96
  }
182
97
  this.invalidateBounds();
183
- };
184
- LeafAtomView.prototype.refreshLayout = function () {
98
+ }
99
+ refreshLayout() {
185
100
  this.layoutElements();
186
101
  this.rootGroup.element.setAttribute("transform", "translate(" + this.x + "," + this.y + ")");
187
- };
188
- LeafAtomView.prototype.addEmbelishment = function (slot, emb) {
102
+ }
103
+ addEmbelishment(slot, emb) {
189
104
  slot.push(emb);
190
- };
191
- LeafAtomView.prototype.orderEmbelishments = function () {
192
- var e_5, _a;
193
- var atom = this.leafAtom;
105
+ }
106
+ orderEmbelishments() {
107
+ const atom = this.leafAtom;
194
108
  if (atom.type != core_1.AtomType.SYLLABLE && atom.type != core_1.AtomType.NOTE) {
195
109
  return;
196
110
  }
197
- var lit = atom;
111
+ const lit = atom;
198
112
  if (lit.embelishments.length == 0)
199
113
  return;
200
- try {
201
- for (var _b = __values(lit.embelishments), _c = _b.next(); !_c.done; _c = _b.next()) {
202
- var emb = _c.value;
203
- switch (emb.type) {
204
- case gamakas_1.GamakaType.Kampitham:
205
- this.addEmbelishment(this.topSlot, new embelishments_1.Kampitham(this));
206
- break;
207
- case gamakas_1.GamakaType.Nokku:
208
- this.addEmbelishment(this.topSlot, new embelishments_1.Nokku(this));
209
- break;
210
- case gamakas_1.GamakaType.Spuritham:
211
- this.addEmbelishment(this.topSlot, new embelishments_1.Spuritham(this));
212
- break;
213
- case gamakas_1.GamakaType.Prathyagatham:
214
- this.addEmbelishment(this.topSlot, new embelishments_1.Prathyagatham(this));
215
- break;
216
- case gamakas_1.GamakaType.Orikkai:
217
- this.addEmbelishment(this.topSlot, new embelishments_1.Orikkai(this));
218
- break;
219
- case gamakas_1.GamakaType.Odukkal:
220
- this.addEmbelishment(this.topSlot, new embelishments_1.Odukkal(this));
221
- break;
222
- case gamakas_1.GamakaType.Aahaatam_Raavi:
223
- this.addEmbelishment(this.topSlot, new embelishments_1.Raavi(this));
224
- break;
225
- case gamakas_1.GamakaType.Aahaatam_Kandippu:
226
- this.addEmbelishment(this.topSlot, new embelishments_1.Kandippu(this));
227
- break;
228
- case gamakas_1.GamakaType.Vaali:
229
- this.addEmbelishment(this.topSlot, new embelishments_1.Vaali(this));
230
- break;
231
- case gamakas_1.GamakaType.Jaaru_Eetra:
232
- case gamakas_1.GamakaType.Jaaru_Irakka:
233
- this.addEmbelishment(this.leftSlot, new embelishments_1.Jaaru(emb, this));
234
- break;
235
- }
236
- }
237
- }
238
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
239
- finally {
240
- try {
241
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
114
+ for (const emb of lit.embelishments) {
115
+ switch (emb.type) {
116
+ case gamakas_1.GamakaType.Kampitham:
117
+ this.addEmbelishment(this.topSlot, new embelishments_1.Kampitham(this));
118
+ break;
119
+ case gamakas_1.GamakaType.Nokku:
120
+ this.addEmbelishment(this.topSlot, new embelishments_1.Nokku(this));
121
+ break;
122
+ case gamakas_1.GamakaType.Spuritham:
123
+ this.addEmbelishment(this.topSlot, new embelishments_1.Spuritham(this));
124
+ break;
125
+ case gamakas_1.GamakaType.Prathyagatham:
126
+ this.addEmbelishment(this.topSlot, new embelishments_1.Prathyagatham(this));
127
+ break;
128
+ case gamakas_1.GamakaType.Orikkai:
129
+ this.addEmbelishment(this.topSlot, new embelishments_1.Orikkai(this));
130
+ break;
131
+ case gamakas_1.GamakaType.Odukkal:
132
+ this.addEmbelishment(this.topSlot, new embelishments_1.Odukkal(this));
133
+ break;
134
+ case gamakas_1.GamakaType.Aahaatam_Raavi:
135
+ this.addEmbelishment(this.topSlot, new embelishments_1.Raavi(this));
136
+ break;
137
+ case gamakas_1.GamakaType.Aahaatam_Kandippu:
138
+ this.addEmbelishment(this.topSlot, new embelishments_1.Kandippu(this));
139
+ break;
140
+ case gamakas_1.GamakaType.Vaali:
141
+ this.addEmbelishment(this.topSlot, new embelishments_1.Vaali(this));
142
+ break;
143
+ case gamakas_1.GamakaType.Jaaru_Eetra:
144
+ case gamakas_1.GamakaType.Jaaru_Irakka:
145
+ this.addEmbelishment(this.leftSlot, new embelishments_1.Jaaru(emb, this));
146
+ break;
242
147
  }
243
- finally { if (e_5) throw e_5.error; }
244
148
  }
245
- };
246
- LeafAtomView.prototype.embRoot = function () {
149
+ }
150
+ embRoot() {
247
151
  return this.rootGroup.element;
248
- };
249
- LeafAtomView.prototype.needsRootElement = function () {
152
+ }
153
+ needsRootElement() {
250
154
  return true;
251
- };
252
- LeafAtomView.prototype.createElements = function (parent) {
155
+ }
156
+ createElements(parent) {
253
157
  this.createGlyphRoot(parent);
254
158
  this.createGlyphElement();
255
159
  this.orderEmbelishments();
256
160
  this.createPostSpacingElement();
257
161
  this.invalidateBounds();
258
- };
259
- LeafAtomView.prototype.createGlyphRoot = function (parent) {
162
+ }
163
+ createGlyphRoot(parent) {
260
164
  this.rootGroup = new shapes_1.ElementShape(TSU.DOM.createSVGNode("g", {
261
165
  doc: document,
262
166
  parent: parent,
@@ -275,9 +179,9 @@ var LeafAtomView = (function (_super) {
275
179
  id: "atomViewTextRoot" + this.leafAtom.uuid,
276
180
  },
277
181
  }));
278
- };
279
- LeafAtomView.prototype.createGlyphElement = function () {
280
- var atom = this.leafAtom;
182
+ }
183
+ createGlyphElement() {
184
+ const atom = this.leafAtom;
281
185
  this.glyph = new shapes_1.ElementShape(TSU.DOM.createSVGNode("tspan", {
282
186
  doc: document,
283
187
  parent: this.rootText.element,
@@ -287,8 +191,8 @@ var LeafAtomView = (function (_super) {
287
191
  },
288
192
  text: this.glyphLabel,
289
193
  }));
290
- };
291
- LeafAtomView.prototype.createPostSpacingElement = function () {
194
+ }
195
+ createPostSpacingElement() {
292
196
  if (this.leafAtom.beforeRest) {
293
197
  this.postSpacingSpan = TSU.DOM.createSVGNode("tspan", {
294
198
  doc: document,
@@ -300,54 +204,32 @@ var LeafAtomView = (function (_super) {
300
204
  text: this.leafAtom.beforeRest ? " - " : " ",
301
205
  });
302
206
  }
303
- };
304
- return LeafAtomView;
305
- }(shapes_1.LeafAtomView));
207
+ }
208
+ }
306
209
  exports.LeafAtomView = LeafAtomView;
307
- var SpaceView = (function (_super) {
308
- __extends(SpaceView, _super);
309
- function SpaceView() {
310
- return _super !== null && _super.apply(this, arguments) || this;
210
+ class SpaceView extends LeafAtomView {
211
+ get glyphLabel() {
212
+ if (this.space.isSilent)
213
+ return " ";
214
+ if (this.space.duration.isOne)
215
+ return ",";
216
+ if (this.space.duration.cmpNum(2) == 0)
217
+ return ";";
218
+ return "_";
219
+ }
220
+ get space() {
221
+ return this.leafAtom;
311
222
  }
312
- Object.defineProperty(SpaceView.prototype, "glyphLabel", {
313
- get: function () {
314
- if (this.space.isSilent)
315
- return " ";
316
- if (this.space.duration.isOne)
317
- return ",";
318
- if (this.space.duration.cmpNum(2) == 0)
319
- return ";";
320
- return "_";
321
- },
322
- enumerable: false,
323
- configurable: true
324
- });
325
- Object.defineProperty(SpaceView.prototype, "space", {
326
- get: function () {
327
- return this.leafAtom;
328
- },
329
- enumerable: false,
330
- configurable: true
331
- });
332
- return SpaceView;
333
- }(LeafAtomView));
334
- var NoteView = (function (_super) {
335
- __extends(NoteView, _super);
336
- function NoteView() {
337
- return _super !== null && _super.apply(this, arguments) || this;
223
+ }
224
+ class NoteView extends LeafAtomView {
225
+ get glyphLabel() {
226
+ return this.note.value;
338
227
  }
339
- Object.defineProperty(NoteView.prototype, "glyphLabel", {
340
- get: function () {
341
- return this.note.value;
342
- },
343
- enumerable: false,
344
- configurable: true
345
- });
346
- NoteView.prototype.needsRootElement = function () {
228
+ needsRootElement() {
347
229
  return true;
348
- };
349
- NoteView.prototype.createGlyphElement = function () {
350
- _super.prototype.createGlyphElement.call(this);
230
+ }
231
+ createGlyphElement() {
232
+ super.createGlyphElement();
351
233
  if (this.note.shift == true || this.note.shift != 0) {
352
234
  this.shiftElement = TSU.DOM.createSVGNode("tspan", {
353
235
  doc: document,
@@ -361,56 +243,36 @@ var NoteView = (function (_super) {
361
243
  text: (this.note.shift == true ? "*" : this.note.shift) + " ",
362
244
  });
363
245
  }
364
- };
365
- NoteView.prototype.moveGlyphToRoot = function () {
246
+ }
247
+ moveGlyphToRoot() {
366
248
  if (this.shiftElement) {
367
249
  this.rootGroup.element.appendChild(this.shiftElement);
368
250
  }
369
- };
370
- NoteView.prototype.orderEmbelishments = function () {
371
- var note = this.note;
251
+ }
252
+ orderEmbelishments() {
253
+ const note = this.note;
372
254
  if (note.octave > 0) {
373
255
  this.topSlot.push(new embelishments_1.OctaveIndicator(this, note));
374
256
  }
375
257
  else if (this.note.octave < 0) {
376
258
  this.bottomSlot.push(new embelishments_1.OctaveIndicator(this, note));
377
259
  }
378
- _super.prototype.orderEmbelishments.call(this);
379
- };
380
- Object.defineProperty(NoteView.prototype, "note", {
381
- get: function () {
382
- return this.leafAtom;
383
- },
384
- enumerable: false,
385
- configurable: true
386
- });
387
- return NoteView;
388
- }(LeafAtomView));
389
- var SyllableView = (function (_super) {
390
- __extends(SyllableView, _super);
391
- function SyllableView() {
392
- return _super !== null && _super.apply(this, arguments) || this;
260
+ super.orderEmbelishments();
393
261
  }
394
- Object.defineProperty(SyllableView.prototype, "glyphLabel", {
395
- get: function () {
396
- return this.syllable.value;
397
- },
398
- enumerable: false,
399
- configurable: true
400
- });
401
- Object.defineProperty(SyllableView.prototype, "syllable", {
402
- get: function () {
403
- return this.leafAtom;
404
- },
405
- enumerable: false,
406
- configurable: true
407
- });
408
- return SyllableView;
409
- }(LeafAtomView));
410
- function createAtomView(parent, atom, litDefaultsToNote, groupViewScale) {
411
- if (litDefaultsToNote === void 0) { litDefaultsToNote = false; }
412
- if (groupViewScale === void 0) { groupViewScale = 1.0; }
413
- var out;
262
+ get note() {
263
+ return this.leafAtom;
264
+ }
265
+ }
266
+ class SyllableView extends LeafAtomView {
267
+ get glyphLabel() {
268
+ return this.syllable.value;
269
+ }
270
+ get syllable() {
271
+ return this.leafAtom;
272
+ }
273
+ }
274
+ function createAtomView(parent, atom, litDefaultsToNote = false, groupViewScale = 1.0) {
275
+ let out;
414
276
  switch (atom.type) {
415
277
  case core_1.AtomType.SPACE:
416
278
  out = new SpaceView(atom);
@@ -423,11 +285,11 @@ function createAtomView(parent, atom, litDefaultsToNote, groupViewScale) {
423
285
  break;
424
286
  case core_1.AtomType.LITERAL:
425
287
  if (litDefaultsToNote) {
426
- var lit = core_1.Note.fromLit(atom);
288
+ const lit = core_1.Note.fromLit(atom);
427
289
  out = new NoteView(lit);
428
290
  }
429
291
  else {
430
- var lit = core_1.Syllable.fromLit(atom);
292
+ const lit = core_1.Syllable.fromLit(atom);
431
293
  out = new SyllableView(lit);
432
294
  }
433
295
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"atomviews.js","sourceRoot":"","sources":["../../../src/carnatic/atomviews.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Atom, Group, Literal, AtomType, Note, Space, Syllable } from \"../core\";\nimport {\n LeafAtomView as LeafAtomViewBase,\n GroupView as GroupViewBase,\n AtomView,\n Embelishment,\n ElementShape,\n} from \"../shapes\";\nimport {\n OctaveIndicator,\n Kampitham,\n Nokku,\n Spuritham,\n Prathyagatham,\n Orikkai,\n Odukkal,\n Raavi,\n Kandippu,\n Vaali,\n Jaaru,\n} from \"./embelishments\";\nimport { GamakaType } from \"./gamakas\";\n\nexport class GroupView extends GroupViewBase {\n createAtomView(atom: Atom): AtomView {\n return createAtomView(this.groupElement, atom, this.defaultToNotes, 0.7);\n }\n}\n\nexport abstract class LeafAtomView extends LeafAtomViewBase {\n leftSlot: Embelishment[] = [];\n topSlot: Embelishment[] = [];\n rightSlot: Embelishment[] = [];\n bottomSlot: Embelishment[] = [];\n glyph: ElementShape;\n\n // Spaces required before and after to accomodate for left and right slots\n protected postSpacingSpan: SVGTSpanElement;\n // Sometimes this.element may not be the root element if we need spacings\n // the rootElement is the top of the chain\n protected rootGroup: ElementShape;\n protected rootText: ElementShape;\n\n abstract get glyphLabel(): string;\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.rootGroup.element);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n const out = { ...this.rootText.minSize };\n const totalWidth =\n this.leftSlot.reduce((a, b) => a + b.minSize.width, 0) +\n this.rightSlot.reduce((a, b) => a + b.minSize.width, 0) +\n this.leftSlot.length + // Padding of 1\n this.rightSlot.length; // Padding of 1\n const totalHeight =\n this.topSlot.reduce((a, b) => a + b.minSize.height, 0) +\n this.bottomSlot.reduce((a, b) => a + b.minSize.height, 0);\n out.width += totalWidth;\n out.height += totalHeight;\n // if (this.postSpacingSpan) out.width += this.postSpacingSpan.getBBox().width;\n return out;\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, NaN, NaN];\n }\n\n protected layoutElements(): void {\n // Lays out all the child elements locally\n const textSize = this.rootText.minSize;\n // assume text is at 0,0 and lay things around it\n\n // now layout leftSlots\n let currX = 0;\n let currY = this.hasY ? this.y : 0;\n // place left embelishments\n for (const emb of this.leftSlot) {\n emb.x = currX;\n emb.refreshLayout();\n currX += emb.minSize.width + 1;\n }\n\n // now place the text\n const textX = currX;\n this.rootText.x = currX;\n this.rootText.refreshLayout();\n\n // And right embelishments\n currX += this.rootText.minSize.width;\n for (const emb of this.rightSlot) {\n emb.x = currX;\n emb.refreshLayout();\n currX += emb.minSize.width + 1;\n }\n\n // layout top and bottom if x or y has changed\n const gminSize = this.glyph.minSize;\n\n // top embelishments\n const glyphX = textX + this.glyph.x;\n const glyphY = this.glyph.y;\n currY = glyphY - this.glyph.minSize.height + 5;\n for (const emb of this.topSlot) {\n const bb = emb.minSize;\n emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY - bb.height, null, null, true);\n currY = emb.y;\n }\n\n // bottom embelishments\n currY = glyphY + 7;\n for (const emb of this.bottomSlot) {\n const bb = emb.minSize;\n emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY, null, null, true);\n currY = emb.y + bb.height;\n }\n this.invalidateBounds();\n }\n\n refreshLayout(): void {\n // TODO - move this code out to refreshLayout?\n // set the glyphs Y first so we can layout others\n this.layoutElements();\n this.rootGroup.element.setAttribute(\"transform\", \"translate(\" + this.x + \",\" + this.y + \")\");\n }\n\n protected addEmbelishment(slot: Embelishment[], emb: Embelishment): void {\n slot.push(emb);\n // this.addShape(emb);\n }\n\n /**\n * Orders embelishments and creates their views.\n */\n orderEmbelishments(): void {\n const atom = this.leafAtom;\n if (atom.type != AtomType.SYLLABLE && atom.type != AtomType.NOTE) {\n return;\n }\n const lit = atom as Literal;\n if (lit.embelishments.length == 0) return;\n for (const emb of lit.embelishments) {\n switch (emb.type) {\n case GamakaType.Kampitham:\n this.addEmbelishment(this.topSlot, new Kampitham(this));\n break;\n case GamakaType.Nokku:\n this.addEmbelishment(this.topSlot, new Nokku(this));\n break;\n case GamakaType.Spuritham:\n this.addEmbelishment(this.topSlot, new Spuritham(this));\n break;\n case GamakaType.Prathyagatham:\n this.addEmbelishment(this.topSlot, new Prathyagatham(this));\n break;\n case GamakaType.Orikkai:\n this.addEmbelishment(this.topSlot, new Orikkai(this));\n break;\n case GamakaType.Odukkal:\n this.addEmbelishment(this.topSlot, new Odukkal(this));\n break;\n case GamakaType.Aahaatam_Raavi:\n this.addEmbelishment(this.topSlot, new Raavi(this));\n break;\n case GamakaType.Aahaatam_Kandippu:\n this.addEmbelishment(this.topSlot, new Kandippu(this));\n break;\n case GamakaType.Vaali:\n this.addEmbelishment(this.topSlot, new Vaali(this));\n break;\n case GamakaType.Jaaru_Eetra:\n case GamakaType.Jaaru_Irakka:\n this.addEmbelishment(this.leftSlot, new Jaaru(emb, this));\n break;\n }\n }\n }\n\n embRoot(): SVGGraphicsElement {\n return this.rootGroup.element;\n }\n\n needsRootElement(): boolean {\n return true; // this.rightSlot.length > 0 || this.leafAtom.beforeRest;\n }\n\n createElements(parent: SVGGraphicsElement): void {\n // Create the glyph element first before anything\n // this allows embelishments to get early access to this element\n this.createGlyphRoot(parent);\n this.createGlyphElement();\n // Order embelishments (without creating any views)\n this.orderEmbelishments();\n this.createPostSpacingElement();\n this.invalidateBounds();\n }\n\n protected createGlyphRoot(parent: SVGGraphicsElement): void {\n this.rootGroup = new ElementShape(\n TSU.DOM.createSVGNode(\"g\", {\n doc: document,\n parent: parent,\n attrs: {\n atomid: this.leafAtom.uuid,\n class: \"atomViewRootGroup\",\n id: \"atomViewRootGroup\" + this.leafAtom.uuid,\n },\n }),\n );\n this.rootText = new ElementShape(\n TSU.DOM.createSVGNode(\"text\", {\n doc: document,\n parent: this.rootGroup.element,\n attrs: {\n atomid: this.leafAtom.uuid,\n class: \"atomViewTextRoot\",\n id: \"atomViewTextRoot\" + this.leafAtom.uuid,\n },\n }),\n );\n }\n\n protected createGlyphElement(): void {\n const atom = this.leafAtom;\n this.glyph = new ElementShape(\n TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: atom.uuid,\n id: \"atomGlyph\" + atom.uuid,\n },\n text: this.glyphLabel, // + (note.beforeRest ? \" - \" : \" \"),\n }),\n );\n }\n\n protected createPostSpacingElement(): void {\n if (this.leafAtom.beforeRest) {\n this.postSpacingSpan = TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: this.leafAtom.uuid,\n id: \"postSpacing\" + this.leafAtom.uuid,\n },\n text: this.leafAtom.beforeRest ? \" - \" : \" \",\n });\n }\n }\n}\n\nclass SpaceView extends LeafAtomView {\n get glyphLabel(): string {\n if (this.space.isSilent) return \" \";\n if (this.space.duration.isOne) return \",\";\n if (this.space.duration.cmpNum(2) == 0) return \";\";\n return \"_\";\n }\n\n get space(): Space {\n return this.leafAtom as Space;\n }\n}\n\nclass NoteView extends LeafAtomView {\n protected shiftElement: SVGTSpanElement;\n get glyphLabel(): string {\n return this.note.value;\n }\n\n needsRootElement(): boolean {\n return true; // this.note.shift == true || this.note.shift != 0 || super.needsRootElement();\n }\n\n protected createGlyphElement(): void {\n super.createGlyphElement();\n if (this.note.shift == true || this.note.shift != 0) {\n this.shiftElement = TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: this.note.uuid,\n class: \"noteShiftTSpan\",\n id: \"noteShift\" + this.note.uuid,\n \"baseline-shift\": \"sub\",\n },\n text: (this.note.shift == true ? \"*\" : this.note.shift) + \" \",\n });\n }\n }\n\n protected moveGlyphToRoot(): void {\n // super.moveGlyphToRoot();\n if (this.shiftElement) {\n this.rootGroup.element.appendChild(this.shiftElement);\n }\n }\n\n orderEmbelishments(): void {\n const note = this.note;\n // create the embelishments if needed\n if (note.octave > 0) {\n this.topSlot.push(new OctaveIndicator(this, note));\n } else if (this.note.octave < 0) {\n this.bottomSlot.push(new OctaveIndicator(this, note));\n }\n super.orderEmbelishments();\n }\n\n get note(): Note {\n return this.leafAtom as Note;\n }\n}\n\nclass SyllableView extends LeafAtomView {\n get glyphLabel(): string {\n return this.syllable.value;\n }\n\n get syllable(): Syllable {\n return this.leafAtom as Syllable;\n }\n}\n\nexport function createAtomView(\n parent: SVGGraphicsElement,\n atom: Atom,\n litDefaultsToNote = false,\n groupViewScale = 1.0,\n): AtomView {\n let out: AtomView;\n switch (atom.type) {\n // Dealing with leaf atoms\n case AtomType.SPACE:\n out = new SpaceView(atom as Space);\n break;\n case AtomType.SYLLABLE:\n out = new SyllableView(atom as Syllable);\n break;\n case AtomType.NOTE:\n out = new NoteView(atom as Note);\n break;\n case AtomType.LITERAL:\n if (litDefaultsToNote) {\n const lit = Note.fromLit(atom as Note);\n out = new NoteView(lit);\n } else {\n const lit = Syllable.fromLit(atom as Syllable);\n out = new SyllableView(lit);\n }\n break;\n case AtomType.GROUP:\n out = new GroupView(atom as Group);\n (out as GroupView).defaultToNotes = litDefaultsToNote;\n (out as GroupView).scaleFactor = groupViewScale;\n break;\n default:\n // We should never get a group as we are iterating\n // at leaf atom levels\n throw new Error(\"Invalid atom type: \" + atom.type);\n }\n out.createElements(parent);\n return out;\n}\n"]}
1
+ {"version":3,"file":"atomviews.js","sourceRoot":"","sources":["../../../src/carnatic/atomviews.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Atom, Group, Literal, AtomType, Note, Space, Syllable } from \"../core\";\nimport {\n LeafAtomView as LeafAtomViewBase,\n GroupView as GroupViewBase,\n AtomView,\n Embelishment,\n ElementShape,\n} from \"../shapes\";\nimport {\n OctaveIndicator,\n Kampitham,\n Nokku,\n Spuritham,\n Prathyagatham,\n Orikkai,\n Odukkal,\n Raavi,\n Kandippu,\n Vaali,\n Jaaru,\n} from \"./embelishments\";\nimport { GamakaType } from \"./gamakas\";\n\nexport class GroupView extends GroupViewBase {\n createAtomView(atom: Atom): AtomView {\n return createAtomView(this.groupElement, atom, this.defaultToNotes, 0.7);\n }\n}\n\nexport abstract class LeafAtomView extends LeafAtomViewBase {\n leftSlot: Embelishment[] = [];\n topSlot: Embelishment[] = [];\n rightSlot: Embelishment[] = [];\n bottomSlot: Embelishment[] = [];\n glyph: ElementShape;\n\n // Spaces required before and after to accomodate for left and right slots\n protected postSpacingSpan: SVGTSpanElement;\n // Sometimes this.element may not be the root element if we need spacings\n // the rootElement is the top of the chain\n protected rootGroup: ElementShape;\n protected rootText: ElementShape;\n\n abstract get glyphLabel(): string;\n\n protected refreshBBox(): TSU.Geom.Rect {\n return TSU.DOM.svgBBox(this.rootGroup.element);\n }\n\n protected refreshMinSize(): TSU.Geom.Size {\n const out = { ...this.rootText.minSize };\n const totalWidth =\n this.leftSlot.reduce((a, b) => a + b.minSize.width, 0) +\n this.rightSlot.reduce((a, b) => a + b.minSize.width, 0) +\n this.leftSlot.length + // Padding of 1\n this.rightSlot.length; // Padding of 1\n const totalHeight =\n this.topSlot.reduce((a, b) => a + b.minSize.height, 0) +\n this.bottomSlot.reduce((a, b) => a + b.minSize.height, 0);\n out.width += totalWidth;\n out.height += totalHeight;\n // if (this.postSpacingSpan) out.width += this.postSpacingSpan.getBBox().width;\n return out;\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, NaN, NaN];\n }\n\n protected layoutElements(): void {\n // Lays out all the child elements locally\n const textSize = this.rootText.minSize;\n // assume text is at 0,0 and lay things around it\n\n // now layout leftSlots\n let currX = 0;\n let currY = this.hasY ? this.y : 0;\n // place left embelishments\n for (const emb of this.leftSlot) {\n emb.x = currX;\n emb.refreshLayout();\n currX += emb.minSize.width + 1;\n }\n\n // now place the text\n const textX = currX;\n this.rootText.x = currX;\n this.rootText.refreshLayout();\n\n // And right embelishments\n currX += this.rootText.minSize.width;\n for (const emb of this.rightSlot) {\n emb.x = currX;\n emb.refreshLayout();\n currX += emb.minSize.width + 1;\n }\n\n // layout top and bottom if x or y has changed\n const gminSize = this.glyph.minSize;\n\n // top embelishments\n const glyphX = textX + this.glyph.x;\n const glyphY = this.glyph.y;\n currY = glyphY - this.glyph.minSize.height + 5;\n for (const emb of this.topSlot) {\n const bb = emb.minSize;\n emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY - bb.height, null, null, true);\n currY = emb.y;\n }\n\n // bottom embelishments\n currY = glyphY + 7;\n for (const emb of this.bottomSlot) {\n const bb = emb.minSize;\n emb.setBounds(glyphX + (gminSize.width - bb.width) / 2, currY, null, null, true);\n currY = emb.y + bb.height;\n }\n this.invalidateBounds();\n }\n\n refreshLayout(): void {\n // TODO - move this code out to refreshLayout?\n // set the glyphs Y first so we can layout others\n this.layoutElements();\n this.rootGroup.element.setAttribute(\"transform\", \"translate(\" + this.x + \",\" + this.y + \")\");\n }\n\n protected addEmbelishment(slot: Embelishment[], emb: Embelishment): void {\n slot.push(emb);\n // this.addShape(emb);\n }\n\n /**\n * Orders embelishments and creates their views.\n */\n orderEmbelishments(): void {\n const atom = this.leafAtom;\n if (atom.type != AtomType.SYLLABLE && atom.type != AtomType.NOTE) {\n return;\n }\n const lit = atom as Literal;\n if (lit.embelishments.length == 0) return;\n for (const emb of lit.embelishments) {\n switch (emb.type) {\n case GamakaType.Kampitham:\n this.addEmbelishment(this.topSlot, new Kampitham(this));\n break;\n case GamakaType.Nokku:\n this.addEmbelishment(this.topSlot, new Nokku(this));\n break;\n case GamakaType.Spuritham:\n this.addEmbelishment(this.topSlot, new Spuritham(this));\n break;\n case GamakaType.Prathyagatham:\n this.addEmbelishment(this.topSlot, new Prathyagatham(this));\n break;\n case GamakaType.Orikkai:\n this.addEmbelishment(this.topSlot, new Orikkai(this));\n break;\n case GamakaType.Odukkal:\n this.addEmbelishment(this.topSlot, new Odukkal(this));\n break;\n case GamakaType.Aahaatam_Raavi:\n this.addEmbelishment(this.topSlot, new Raavi(this));\n break;\n case GamakaType.Aahaatam_Kandippu:\n this.addEmbelishment(this.topSlot, new Kandippu(this));\n break;\n case GamakaType.Vaali:\n this.addEmbelishment(this.topSlot, new Vaali(this));\n break;\n case GamakaType.Jaaru_Eetra:\n case GamakaType.Jaaru_Irakka:\n this.addEmbelishment(this.leftSlot, new Jaaru(emb, this));\n break;\n }\n }\n }\n\n embRoot(): SVGGraphicsElement {\n return this.rootGroup.element;\n }\n\n needsRootElement(): boolean {\n return true; // this.rightSlot.length > 0 || this.leafAtom.beforeRest;\n }\n\n createElements(parent: SVGGraphicsElement): void {\n // Create the glyph element first before anything\n // this allows embelishments to get early access to this element\n this.createGlyphRoot(parent);\n this.createGlyphElement();\n // Order embelishments (without creating any views)\n this.orderEmbelishments();\n this.createPostSpacingElement();\n this.invalidateBounds();\n }\n\n protected createGlyphRoot(parent: SVGGraphicsElement): void {\n this.rootGroup = new ElementShape(\n TSU.DOM.createSVGNode(\"g\", {\n doc: document,\n parent: parent,\n attrs: {\n atomid: this.leafAtom.uuid,\n class: \"atomViewRootGroup\",\n id: \"atomViewRootGroup\" + this.leafAtom.uuid,\n },\n }),\n );\n this.rootText = new ElementShape(\n TSU.DOM.createSVGNode(\"text\", {\n doc: document,\n parent: this.rootGroup.element,\n attrs: {\n atomid: this.leafAtom.uuid,\n class: \"atomViewTextRoot\",\n id: \"atomViewTextRoot\" + this.leafAtom.uuid,\n },\n }),\n );\n }\n\n protected createGlyphElement(): void {\n const atom = this.leafAtom;\n this.glyph = new ElementShape(\n TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: atom.uuid,\n id: \"atomGlyph\" + atom.uuid,\n },\n text: this.glyphLabel, // + (note.beforeRest ? \" - \" : \" \"),\n }),\n );\n }\n\n protected createPostSpacingElement(): void {\n if (this.leafAtom.beforeRest) {\n this.postSpacingSpan = TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: this.leafAtom.uuid,\n id: \"postSpacing\" + this.leafAtom.uuid,\n },\n text: this.leafAtom.beforeRest ? \" - \" : \" \",\n });\n }\n }\n}\n\nclass SpaceView extends LeafAtomView {\n get glyphLabel(): string {\n if (this.space.isSilent) return \" \";\n if (this.space.duration.isOne) return \",\";\n if (this.space.duration.cmpNum(2) == 0) return \";\";\n return \"_\";\n }\n\n get space(): Space {\n return this.leafAtom as Space;\n }\n}\n\nclass NoteView extends LeafAtomView {\n protected shiftElement: SVGTSpanElement;\n get glyphLabel(): string {\n return this.note.value;\n }\n\n needsRootElement(): boolean {\n return true; // this.note.shift == true || this.note.shift != 0 || super.needsRootElement();\n }\n\n protected createGlyphElement(): void {\n super.createGlyphElement();\n if (this.note.shift == true || this.note.shift != 0) {\n this.shiftElement = TSU.DOM.createSVGNode(\"tspan\", {\n doc: document,\n parent: this.rootText.element,\n attrs: {\n atomid: this.note.uuid,\n class: \"noteShiftTSpan\",\n id: \"noteShift\" + this.note.uuid,\n \"baseline-shift\": \"sub\",\n },\n text: (this.note.shift == true ? \"*\" : this.note.shift) + \" \",\n });\n }\n }\n\n protected moveGlyphToRoot(): void {\n // super.moveGlyphToRoot();\n if (this.shiftElement) {\n this.rootGroup.element.appendChild(this.shiftElement);\n }\n }\n\n orderEmbelishments(): void {\n const note = this.note;\n // create the embelishments if needed\n if (note.octave > 0) {\n this.topSlot.push(new OctaveIndicator(this, note));\n } else if (this.note.octave < 0) {\n this.bottomSlot.push(new OctaveIndicator(this, note));\n }\n super.orderEmbelishments();\n }\n\n get note(): Note {\n return this.leafAtom as Note;\n }\n}\n\nclass SyllableView extends LeafAtomView {\n get glyphLabel(): string {\n return this.syllable.value;\n }\n\n get syllable(): Syllable {\n return this.leafAtom as Syllable;\n }\n}\n\nexport function createAtomView(\n parent: SVGGraphicsElement,\n atom: Atom,\n litDefaultsToNote = false,\n groupViewScale = 1.0,\n): AtomView {\n let out: AtomView;\n switch (atom.type) {\n // Dealing with leaf atoms\n case AtomType.SPACE:\n out = new SpaceView(atom as Space);\n break;\n case AtomType.SYLLABLE:\n out = new SyllableView(atom as Syllable);\n break;\n case AtomType.NOTE:\n out = new NoteView(atom as Note);\n break;\n case AtomType.LITERAL:\n if (litDefaultsToNote) {\n const lit = Note.fromLit(atom as Note);\n out = new NoteView(lit);\n } else {\n const lit = Syllable.fromLit(atom as Syllable);\n out = new SyllableView(lit);\n }\n break;\n case AtomType.GROUP:\n out = new GroupView(atom as Group);\n (out as GroupView).defaultToNotes = litDefaultsToNote;\n (out as GroupView).scaleFactor = groupViewScale;\n break;\n default:\n // We should never get a group as we are iterating\n // at leaf atom levels\n throw new Error(\"Invalid atom type: \" + atom.type);\n }\n out.createElements(parent);\n return out;\n}\n"]}