@goplayerjuggler/abc-tools 1.0.14 → 1.0.16

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goplayerjuggler/abc-tools",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "sorting algorithm and implementation for ABC tunes; plus other tools for parsing and manipulating ABC tunes",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -10,6 +10,11 @@
10
10
  "lint": "eslint src test",
11
11
  "lint:fix": "eslint src test --fix"
12
12
  },
13
+ "files": [
14
+ "src",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
13
18
  "keywords": [
14
19
  "abc",
15
20
  "folk",
@@ -27,7 +32,7 @@
27
32
  "license": "GPL-3.0-or-later",
28
33
  "repository": {
29
34
  "type": "git",
30
- "url": "https://github.com/goplayerjuggler/abc-tools.git"
35
+ "url": "git+https://github.com/goplayerjuggler/abc-tools.git"
31
36
  },
32
37
  "bugs": {
33
38
  "url": "https://github.com/goplayerjuggler/abc-tools/issues"
@@ -39,6 +44,8 @@
39
44
  "devDependencies": {
40
45
  "@eslint/eslintrc": "^3.3.1",
41
46
  "@eslint/js": "^9.37.0",
47
+ "baseline-browser-mapping": "^2.9.19",
48
+ "clipboardy": "^5.0.1",
42
49
  "eslint": "^9.37.0",
43
50
  "eslint-plugin-jest": "^29.0.1",
44
51
  "globals": "^16.4.0",
@@ -420,6 +420,26 @@ function convertStandardReel(
420
420
  return result;
421
421
  }
422
422
 
423
+ function doubleBarLength(abc, comment = null) {
424
+ const meter = getMeter(abc);
425
+ if (!Array.isArray(meter) || !meter) {
426
+ throw new Error("invalid meter");
427
+ }
428
+ // const newMeter = [meter[0], meter[1]];
429
+ // if ([16, 8, 4, 2].indexOf(meter[1]) >= 0) newMeter[1] /= 2;
430
+ // else {
431
+ // newMeter[0] *= 2;
432
+ // }
433
+ const newMeter = [meter[0] * 2, meter[1]];
434
+
435
+ let result = //toggleMeter_4_4_to_4_2(reel, meter);
436
+ toggleMeterDoubling(abc, meter, newMeter, meter);
437
+ if (comment) {
438
+ result = result.replace(/(\nK:)/, `\nN:${comment}$1`);
439
+ }
440
+ return result;
441
+ }
442
+
423
443
  /**
424
444
  * Adjusts bar lengths and L field to convert a
425
445
  * reel written in the abnormal way (M:4/4 L:1/16) to the same reel
@@ -676,6 +696,7 @@ module.exports = {
676
696
  convertStandardReel,
677
697
  convertToStandardReel,
678
698
  defaultCommentForReelConversion,
699
+ doubleBarLength,
679
700
  filterHeaders,
680
701
  getFirstBars,
681
702
  hasAnacrucis,
@@ -23,7 +23,7 @@ function getMetadata(abc) {
23
23
  } else if (trimmed.startsWith("R:")) {
24
24
  metadata.rhythm = trimmed.substring(2).trim().toLowerCase();
25
25
  } else if (trimmed.startsWith("C:")) {
26
- metadata.composer = trimmed.substring(2).trim().toLowerCase();
26
+ metadata.composer = trimmed.substring(2).trim();
27
27
  } else if (trimmed.startsWith("M:")) {
28
28
  metadata.meter = trimmed.substring(2).trim();
29
29
  } else if (trimmed.startsWith("K:")) {
@@ -32,6 +32,8 @@ function getMetadata(abc) {
32
32
  break;
33
33
  } else if (trimmed.startsWith("S:")) {
34
34
  metadata.source = trimmed.substring(2).trim();
35
+ } else if (trimmed.startsWith("O:")) {
36
+ metadata.origin = trimmed.substring(2).trim();
35
37
  } else if (trimmed.startsWith("F:")) {
36
38
  metadata.url = trimmed.substring(2).trim();
37
39
  } else if (trimmed.startsWith("D:")) {
@@ -1,3 +1,4 @@
1
+ const { getIncipitForContourGeneration } = require("../incipit.js");
1
2
  const { Fraction } = require("../math.js");
2
3
 
3
4
  const { decodeChar, encodeToChar, silenceChar } = require("./encode.js");
@@ -161,10 +162,105 @@ function compare(objA, objB) {
161
162
  return posA >= keyA.length ? -1 : 1;
162
163
  }
163
164
 
165
+ function canBeCompared(tune1, tune2) {
166
+ if (!tune1.contour || !tune2.contour) return false;
167
+
168
+ // but not hop jigs with different meters
169
+ if (
170
+ tune1.rhythm?.indexOf("hop jig") >= 0 &&
171
+ tune2.rhythm?.indexOf("hop jig") >= 0 &&
172
+ tune1.meter !== tune2.meter
173
+ )
174
+ return false;
175
+
176
+ return true;
177
+ }
178
+
179
+ function getAbcForContour_default(tune) {
180
+ return getIncipitForContourGeneration(
181
+ tune.incipit
182
+ ? tune.incipit
183
+ : Array.isArray(tune.abc)
184
+ ? tune.abc[0]
185
+ : tune.abc
186
+ );
187
+ }
188
+
164
189
  /**
165
190
  * Sort an array of objects containing ABC notation
191
+ * - based on a contour property
192
+ * - when the contour is missing, attempts to generate it
193
+ * - adds info to each object like the contour, the type of rhythm
194
+ * @param {Array<Object>} arr - array of tune objects to sort
195
+ * @param {Object} [options] - options for the sorting
196
+ * @param {function(Object):string} [options.getAbc] - function returning an abc fragment to be used to calculate the contour.
166
197
  */
167
- function sortArray(arr) {
198
+ function sort(arr, options = {}) {
199
+ const {
200
+ comparable = [
201
+ ["jig", "slide", "single jig", "double jig"],
202
+ ["reel", "single reel", "reel (single)", "strathspey", "double reel"],
203
+ ["hornpipe", "barndance", "fling"],
204
+ ],
205
+ applySwingTransform = ["hornpipe", "barndance", "fling", "mazurka"],
206
+ getAbc: getAbcForContour = getAbcForContour_default,
207
+ getContourOptions = {
208
+ withSvg: true,
209
+ },
210
+ } = options;
211
+
212
+ const comparableMap = {};
213
+ //set up comparableMap s.t. all entries in each list of index i go under i_<first entry of i>
214
+ //that way we show the jigs with similar rhythms followed by reels etc.
215
+ for (let i = 0; i < comparable.length; i++) {
216
+ const list = comparable[i];
217
+ //map subsequent entries to the first entry
218
+ for (let j = 0; j < list.length; j++) {
219
+ comparableMap[list[j]] = `${i}_${list[0]}`;
220
+ }
221
+ }
222
+
223
+ for (const tune of arr) {
224
+ if (!tune.contour) {
225
+ try {
226
+ const withSwingTransform =
227
+ applySwingTransform.indexOf(tune.rhythm) >= 0;
228
+ const shortAbc = getAbcForContour(tune);
229
+
230
+ if (shortAbc) {
231
+ getContourOptions.withSwingTransform = withSwingTransform;
232
+ tune.contour = getContour(shortAbc, getContourOptions);
233
+ }
234
+ } catch (error) {
235
+ console.log(error);
236
+ }
237
+ }
238
+ if (!tune.baseRhythm)
239
+ tune.baseRhythm = comparableMap[tune.rhythm] ?? tune.rhythm;
240
+ }
241
+ arr.sort((a, b) => {
242
+ const comparison =
243
+ a.baseRhythm !== b.baseRhythm
244
+ ? a.baseRhythm < b.baseRhythm
245
+ ? -1
246
+ : 1
247
+ : canBeCompared(a, b)
248
+ ? compare(a.contour, b.contour)
249
+ : a.contour && !b.contour
250
+ ? -1
251
+ : b.contour && !a.contour
252
+ ? 1
253
+ : a.name !== b.name
254
+ ? a.name < b.name
255
+ ? -1
256
+ : 1
257
+ : 0;
258
+ return comparison;
259
+ });
260
+ arr.forEach((t) => delete t.baseRhythm);
261
+ }
262
+
263
+ function simpleSort(arr) {
168
264
  for (const item of arr) {
169
265
  if (!item.contour && item.abc) {
170
266
  try {
@@ -198,6 +294,7 @@ function sortArray(arr) {
198
294
 
199
295
  module.exports = {
200
296
  compare,
201
- sortArray,
297
+ sort,
298
+ simpleSort,
202
299
  decodeChar,
203
300
  };
@@ -16,6 +16,7 @@ const { decodeChar } = require("./encode.js");
16
16
  * @property {number} paddingTop - Top padding in pixels
17
17
  * @property {number} strokeWidth - Width of the contour line segments
18
18
  * @property {number} unitWidth - Width in pixels for one unit duration
19
+ * @property {number} baselineWidth - Width in pixels for the baseline
19
20
  * @property {number} yAxisTickLength - Length of regular ticks (for 5th degree markers)
20
21
  * @property {number} yAxisTickWidth - Width of tick marks
21
22
  * @property {number} yAxisTonicTickLength - Length of tonic ticks (for tonic degree markers)
@@ -36,7 +37,7 @@ const { decodeChar } = require("./encode.js");
36
37
  */
37
38
  const contourToSvg_defaultConfig = {
38
39
  connectingVerticalLines: true,
39
- connectingVerticalLinesWidth: 0.8,
40
+ connectingVerticalLinesWidth: 0.5,
40
41
  degreeHeight: 5,
41
42
  paddingTop: 3,
42
43
  paddingBottom: 3,
@@ -45,6 +46,7 @@ const contourToSvg_defaultConfig = {
45
46
  playedColour: "#2563eb", // blue
46
47
  heldColour: "#2563eb", // same as played (no longer lighter blue)
47
48
  baselineColour: "#555555", // Davy's grey
49
+ baselineWidth: 0.5,
48
50
  paddingLeft: 10,
49
51
  paddingRight: 10,
50
52
  minDegree: null,
@@ -56,10 +58,10 @@ const contourToSvg_defaultConfig = {
56
58
  onlyShowMeaningfulStartOfPlayedNotes: false,
57
59
  showYAxis: true,
58
60
  yAxisColour: "#888888",
59
- yAxisWidth: 1,
61
+ yAxisWidth: 0.5,
60
62
  yAxisTickLength: 4,
61
63
  yAxisTonicTickLength: 6,
62
- yAxisTickWidth: 1,
64
+ yAxisTickWidth: 0.5,
63
65
  };
64
66
 
65
67
  /**
@@ -235,7 +237,7 @@ function contourToSvg(contour, svgConfig = {}) {
235
237
  pathElements.push(
236
238
  `<line x1="${config.paddingLeft}" y1="${baselineY}" ` +
237
239
  `x2="${config.paddingLeft + totalWidth}" y2="${baselineY}" ` +
238
- `stroke="${config.baselineColour}" stroke-width="1" />`
240
+ `stroke="${config.baselineColour}" stroke-width="${config.baselineWidth}" />`
239
241
  );
240
242
  }
241
243
 
package/.editorconfig DELETED
@@ -1,26 +0,0 @@
1
-
2
- # top-most EditorConfig file
3
- root = true
4
-
5
- # Unix-style newlines with a newline ending every file
6
- [*]
7
- end_of_line = crlf
8
- insert_final_newline = true
9
-
10
- # Matches multiple files with brace expansion notation
11
- # Set default charset
12
- [*.{js,md}]
13
- charset = utf-8
14
-
15
- # Indentation override for all JS
16
- [**.js]
17
- indent_style = tab
18
-
19
- # Ignore paths
20
- [{tunes.json,**/*tunebook*}.js]
21
- charset = unset
22
- end_of_line = unset
23
- insert_final_newline = unset
24
- trim_trailing_whitespace = unset
25
- indent_style = unset
26
- indent_size = unset
package/.gitattributes DELETED
@@ -1,2 +0,0 @@
1
- # Auto detect text files and perform LF normalization
2
- * text=auto
@@ -1,53 +0,0 @@
1
- name: Tests
2
-
3
- on:
4
- push:
5
- branches: [ main, develop ]
6
- pull_request:
7
- branches: [ main ]
8
-
9
- jobs:
10
- test:
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - uses: actions/checkout@v3
15
-
16
- - name: Use Node.js (latest LTS)
17
- uses: actions/setup-node@v3
18
- with:
19
- node-version: 'lts/*'
20
- cache: 'npm'
21
-
22
- - name: Install dependencies
23
- run: npm ci
24
-
25
- - name: Run linter
26
- run: npm run lint
27
-
28
- - name: Run tests
29
- id: run-tests
30
- run: npm test
31
-
32
- # - name: Run tests and collect coverage
33
- # id: run-tests
34
- # run: |
35
- # # Generate Jest coverage (creates coverage/ and coverage/lcov.info)
36
- # # If your npm test script doesn't pass args to Jest, replace with: npx jest --coverage
37
- # npm test -- --coverage --coverageReporters=lcov
38
-
39
- # - name: Upload coverage artifact
40
- # if: always()
41
- # uses: actions/upload-artifact@v4
42
- # with:
43
- # name: coverage-report
44
- # path: coverage/
45
-
46
- # - name: Upload coverage to Codecov
47
- # if: always()
48
- # uses: codecov/codecov-action@v3
49
- # with:
50
- # files: coverage/lcov.info
51
- # flags: unittests
52
- # name: codecov-umbrella
53
- # fail_ci_if_error: false
package/eslint.config.js DELETED
@@ -1,41 +0,0 @@
1
- const js = require("@eslint/js");
2
- const globals = require("globals");
3
- const pluginJest = require("eslint-plugin-jest");
4
-
5
- module.exports = [
6
- {
7
- ...js.configs.recommended,
8
- plugins: { jest: pluginJest },
9
- languageOptions: {
10
- ...js.configs.recommended.languageOptions,
11
- globals: {
12
- ...globals.node,
13
- ...pluginJest.environments.globals.globals,
14
- },
15
- ecmaVersion: 12,
16
- sourceType: "module",
17
- },
18
-
19
- ignores: ["**/node_modules/", "**/coverage/", "**/dist/"],
20
- rules: {
21
- ...js.configs.recommended.rules,
22
- // "arrow-spacing": "error"
23
- //curly: ["error", "all"],
24
- // "eol-last": ["error", "always"],
25
- eqeqeq: ["error", "always"],
26
- "no-console": "off",
27
- "no-eval": "error",
28
- "no-implied-eval": "error",
29
- // "no-trailing-spaces": "error",
30
- "no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
31
- "no-var": "error",
32
- "no-with": "error",
33
- "prefer-const": "error",
34
- // "prefer-template": "error",
35
- // "comma-dangle": ["error", "never"],
36
- // "indent": ["error", 2],
37
- // "quotes": ["error", "single", { avoidEscape: true }],
38
- // "semi": ["error", "always"],
39
- },
40
- },
41
- ];
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="62" viewBox="0 0 80 62" role="img">
2
- <rect width="80" height="62" fill="white"/>
3
- <line x1="10" y1="51" x2="70" y2="51" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="16" x2="25" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="16" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="11" x2="40" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="11" x2="40" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="62" viewBox="0 0 80 62" role="img">
2
- <rect width="80" height="62" fill="white"/>
3
- <line x1="10" y1="51" x2="70" y2="51" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="16" x2="25" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="16" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="11" x2="40" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="11" x2="40" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="47" viewBox="0 0 80 47" role="img">
2
- <rect width="80" height="47" fill="white"/>
3
- <line x1="10" y1="1" x2="70" y2="1" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="36" x2="25" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="36" x2="25" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="31" x2="40" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="31" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="26" x2="55" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="26" x2="55" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="21" x2="70" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="47" viewBox="0 0 80 47" role="img">
2
- <rect width="80" height="47" fill="white"/>
3
- <line x1="10" y1="1" x2="70" y2="1" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="36" x2="25" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="36" x2="25" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="31" x2="40" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="31" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="26" x2="55" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="26" x2="55" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="21" x2="70" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="27" viewBox="0 0 80 27" role="img">
2
- <rect width="80" height="27" fill="white"/>
3
- <line x1="10" y1="16" x2="70" y2="16" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="16" x2="25" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="16" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="11" x2="40" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="11" x2="40" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="80" height="27" viewBox="0 0 80 27" role="img">
2
- <rect width="80" height="27" fill="white"/>
3
- <line x1="10" y1="16" x2="70" y2="16" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="16" x2="25" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="16" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="11" x2="40" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="11" x2="40" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="95" height="12" viewBox="0 0 95 12" role="img">
2
- <rect width="95" height="12" fill="white"/>
3
- <line x1="10" y1="1" x2="85" y2="1" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="1" x2="25" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="1" x2="40" y2="1" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="1" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="70" y1="1" x2="85" y2="1" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="95" height="12" viewBox="0 0 95 12" role="img">
2
- <rect width="95" height="12" fill="white"/>
3
- <line x1="10" y1="1" x2="85" y2="1" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="1" x2="25" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="1" x2="40" y2="1" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="1" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="55" y1="1" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="70" y1="1" x2="85" y2="1" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="110" height="22" viewBox="0 0 110 22" role="img">
2
- <rect width="110" height="22" fill="white"/>
3
- <line x1="10" y1="11" x2="100" y2="11" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="11" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="11" x2="25" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="55" y1="6" x2="70" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="70" y1="6" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="85" y1="1" x2="100" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="110" height="22" viewBox="0 0 110 22" role="img">
2
- <rect width="110" height="22" fill="white"/>
3
- <line x1="10" y1="11" x2="100" y2="11" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="11" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="11" x2="25" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="55" y1="6" x2="70" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="70" y1="6" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="85" y1="1" x2="100" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,17 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="125" height="42" viewBox="0 0 125 42" role="img">
2
- <rect width="125" height="42" fill="white"/>
3
- <line x1="10" y1="31" x2="115" y2="31" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="31" x2="25" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="31" x2="25" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="26" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="26" x2="40" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="21" x2="55" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="21" x2="55" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="16" x2="70" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="70" y1="16" x2="70" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="70" y1="11" x2="85" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="85" y1="11" x2="85" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="85" y1="6" x2="100" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="100" y1="6" x2="100" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="100" y1="1" x2="115" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
17
- </svg>
@@ -1,17 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="125" height="42" viewBox="0 0 125 42" role="img">
2
- <rect width="125" height="42" fill="white"/>
3
- <line x1="10" y1="31" x2="115" y2="31" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="31" x2="25" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="31" x2="25" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="25" y1="26" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="26" x2="40" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="40" y1="21" x2="55" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="21" x2="55" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="55" y1="16" x2="70" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="70" y1="16" x2="70" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="70" y1="11" x2="85" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="85" y1="11" x2="85" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="85" y1="6" x2="100" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="100" y1="6" x2="100" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="100" y1="1" x2="115" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
17
- </svg>
@@ -1,21 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="170" height="47" viewBox="0 0 170 47" role="img">
2
- <rect width="170" height="47" fill="white"/>
3
- <line x1="10" y1="36" x2="160" y2="36" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="36" x2="25" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="36" x2="40" y2="36" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="36" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="26" x2="55" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="55" y1="26" x2="55" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="31" x2="70" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="70" y1="31" x2="70" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="70" y1="36" x2="85" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="85" y1="36" x2="85" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="85" y1="31" x2="100" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="100" y1="31" x2="100" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="100" y1="26" x2="115" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="115" y1="26" x2="130" y2="26" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
17
- <line x1="130" y1="26" x2="130" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
18
- <line x1="130" y1="16" x2="145" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
19
- <line x1="145" y1="16" x2="145" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
20
- <line x1="145" y1="1" x2="160" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
21
- </svg>
@@ -1,21 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="170" height="47" viewBox="0 0 170 47" role="img">
2
- <rect width="170" height="47" fill="white"/>
3
- <line x1="10" y1="36" x2="160" y2="36" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="36" x2="25" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="36" x2="40" y2="36" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="36" x2="40" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="40" y1="26" x2="55" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="55" y1="26" x2="55" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="55" y1="31" x2="70" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="70" y1="31" x2="70" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="70" y1="36" x2="85" y2="36" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="85" y1="36" x2="85" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="85" y1="31" x2="100" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="100" y1="31" x2="100" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="100" y1="26" x2="115" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="115" y1="26" x2="130" y2="26" stroke="#93c5fd" stroke-width="2" stroke-linecap="round" />
17
- <line x1="130" y1="26" x2="130" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
18
- <line x1="130" y1="16" x2="145" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
19
- <line x1="145" y1="16" x2="145" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
20
- <line x1="145" y1="1" x2="160" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
21
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="110" height="22" viewBox="0 0 110 22" role="img">
2
- <rect width="110" height="22" fill="white"/>
3
- <line x1="10" y1="11" x2="100" y2="11" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="11" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="11" x2="25" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="70" y1="1" x2="85" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="110" height="22" viewBox="0 0 110 22" role="img">
2
- <rect width="110" height="22" fill="white"/>
3
- <line x1="10" y1="11" x2="100" y2="11" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="11" x2="25" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="25" y1="11" x2="25" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="40" y1="6" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="55" y1="6" x2="55" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="70" y1="1" x2="85" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- </svg>
@@ -1,17 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="95" height="42" viewBox="0 0 95 42" role="img">
2
- <rect width="95" height="42" fill="white"/>
3
- <line x1="10" y1="31" x2="85" y2="31" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="31" x2="17.5" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="17.5" y1="31" x2="17.5" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="17.5" y1="26" x2="25" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="25" y1="26" x2="25" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="25" y1="21" x2="40" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="40" y1="21" x2="40" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="40" y1="16" x2="47.5" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="47.5" y1="16" x2="47.5" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="47.5" y1="11" x2="55" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="55" y1="11" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="55" y1="6" x2="70" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="70" y1="6" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="70" y1="1" x2="85" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
17
- </svg>
@@ -1,17 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" class="contour-svg" aria-label="Tune contour" width="95" height="42" viewBox="0 0 95 42" role="img">
2
- <rect width="95" height="42" fill="white"/>
3
- <line x1="10" y1="31" x2="85" y2="31" stroke="#555555" stroke-width="1" />
4
- <line x1="10" y1="31" x2="17.5" y2="31" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
5
- <line x1="17.5" y1="31" x2="17.5" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
6
- <line x1="17.5" y1="26" x2="25" y2="26" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
7
- <line x1="25" y1="26" x2="25" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
8
- <line x1="25" y1="21" x2="40" y2="21" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
9
- <line x1="40" y1="21" x2="40" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
10
- <line x1="40" y1="16" x2="47.5" y2="16" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
11
- <line x1="47.5" y1="16" x2="47.5" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
12
- <line x1="47.5" y1="11" x2="55" y2="11" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
13
- <line x1="55" y1="11" x2="55" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
14
- <line x1="55" y1="6" x2="70" y2="6" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
15
- <line x1="70" y1="6" x2="70" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
16
- <line x1="70" y1="1" x2="85" y2="1" stroke="#2563eb" stroke-width="2" stroke-linecap="round" />
17
- </svg>
package/testoutput.txt DELETED
Binary file