@pepperhorn/chordl-core 0.3.0 → 0.3.4

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.
@@ -5,9 +5,11 @@
5
5
  // spaces, which means setting font-size = 4 * staffLineSpacing makes glyphs
6
6
  // render at the correct staff size with no per-glyph scaling.
7
7
  //
8
- // Required @font-face: consumers must load 'Bravura' / 'Petaluma' (or any
9
- // other SMuFL-compliant font) before rendering. The dev playground loads
10
- // woff2 files from /fonts/. See dev/index.html.
8
+ // Font loading: @pepperhorn/chordl-react auto-injects subsetted versions
9
+ // (PHBravura, PHPetaluma — see chordl-react/src/staff-fonts.ts) so consumers
10
+ // don't need to host woff2 files. The fontFamily stack falls back to the
11
+ // unsubsetted Bravura/Petaluma names so consumers who provide the full fonts
12
+ // (e.g. for extended glyphs beyond the 6 subset codepoints) still work.
11
13
  const SMUFL = {
12
14
  gClef: "",
13
15
  fClef: "",
@@ -25,7 +27,7 @@ function synthesizedBrace(curl) {
25
27
  }
26
28
  export const BRAVURA_GLYPHS = {
27
29
  name: "Bravura",
28
- fontFamily: "Bravura, serif",
30
+ fontFamily: "PHBravura, Bravura, serif",
29
31
  glyphs: {
30
32
  trebleClef: SMUFL.gClef,
31
33
  bassClef: SMUFL.fClef,
@@ -38,7 +40,7 @@ export const BRAVURA_GLYPHS = {
38
40
  };
39
41
  export const PETALUMA_GLYPHS = {
40
42
  name: "Petaluma",
41
- fontFamily: "Petaluma, serif",
43
+ fontFamily: "PHPetaluma, Petaluma, serif",
42
44
  glyphs: {
43
45
  trebleClef: SMUFL.gClef,
44
46
  bassClef: SMUFL.fClef,
@@ -1 +1 @@
1
- {"version":3,"file":"staff-glyphs.js","sourceRoot":"","sources":["../../src/engine/staff-glyphs.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,gDAAgD;AAgBhD,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE,GAAG;IACnB,iBAAiB,EAAE,GAAG;CACd,CAAC;AAEX,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,KAAK,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;IACxH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,KAAK,EAAE,KAAK,CAAC,eAAe;QAC5B,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,OAAO,EAAE,KAAK,CAAC,iBAAiB;QAChC,SAAS,EAAE,KAAK,CAAC,aAAa;KAC/B;IACD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,iBAAiB;IAC7B,MAAM,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,KAAK,EAAE,KAAK,CAAC,eAAe;QAC5B,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,OAAO,EAAE,KAAK,CAAC,iBAAiB;QAChC,SAAS,EAAE,KAAK,CAAC,aAAa;KAC/B;IACD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,IAAI,cAAc,GAAkB,cAAc,CAAC;AAEnD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,cAAc,GAAG,MAAM,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"staff-glyphs.js","sourceRoot":"","sources":["../../src/engine/staff-glyphs.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,6EAA6E;AAC7E,wEAAwE;AAgBxE,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE,GAAG;IACnB,iBAAiB,EAAE,GAAG;CACd,CAAC;AAEX,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,KAAK,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;IACxH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,2BAA2B;IACvC,MAAM,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,KAAK,EAAE,KAAK,CAAC,eAAe;QAC5B,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,OAAO,EAAE,KAAK,CAAC,iBAAiB;QAChC,SAAS,EAAE,KAAK,CAAC,aAAa;KAC/B;IACD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,6BAA6B;IACzC,MAAM,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,KAAK,EAAE,KAAK,CAAC,eAAe;QAC5B,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,OAAO,EAAE,KAAK,CAAC,iBAAiB;QAChC,SAAS,EAAE,KAAK,CAAC,aAAa;KAC/B;IACD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,IAAI,cAAc,GAAkB,cAAc,CAAC;AAEnD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,cAAc,GAAG,MAAM,CAAC;AAC1B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { Format, TextSize, NoteNameMode, WhiteNote, NoteName, ColorTheme, ParsedChordRequest, KeyDescriptor, HandBracket, DisplayMode, DisplayDefaults, ChordData, SectionData, ChordSheetData, } from "./types";
1
+ export type { Format, TextSize, NoteNameMode, WhiteNote, NoteName, ColorTheme, ParsedChordRequest, KeyDescriptor, HandBracket, NotesGroup, DisplayMode, DisplayDefaults, ChordData, SectionData, ChordSheetData, } from "./types";
2
2
  export { computeKeyboard, computeSvgDimensions } from "./engine/keyboard-layout";
3
3
  export { mapHighlights, normalizeNote } from "./engine/highlight-mapper";
4
4
  export { FLAT_TO_SHARP, SHARP_TO_FLAT, FLAT_KEYS, normalizeToSharps, spellForKey, spellWithPreference, PC_SEMITONES, MIDI_A3, assignAscendingOctaves, } from "./engine/note-spelling";
@@ -1,4 +1,8 @@
1
- const FILLER_WORDS = /\b(show\s+me|draw|display|render|please|a|an|the|with|that|this|me|of)\b/gi;
1
+ // "a"/"an" are excluded when immediately followed by '#', '/', or end-of-string —
2
+ // those are the only non-word-char continuations a real chord root can have
3
+ // (e.g. bare "A", "A#dim", "A/C#"); any word-char continuation (e.g. "Adim",
4
+ // "Am7") already fails the trailing \b below, so this doesn't affect them.
5
+ const FILLER_WORDS = /\b(show\s+me|draw|display|render|please|a(?![#/]|$)|an(?![#/]|$)|the|with|that|this|me|of)\b/gi;
2
6
  const FORMAT_RE = /\b(compact|exact|full)\b/i;
3
7
  const FORMAT_FULL_RE = /\bfull\s+(?:layout|height|size|keys?)\b/i;
4
8
  // "size 80" / "size 80%" / "size 0.8" / "size xl" / "keys xl"
@@ -77,12 +81,58 @@ const SCALE_EXPLICIT_RE = /([A-Ga-g][#b]?)\s+(major|minor)\s+scale/i;
77
81
  const DIRECTION_RE = /\b(ascending|descending)\b/i;
78
82
  // "in N octaves" / "N octaves" — works for both scales and arpeggios
79
83
  const OCTAVES_RE = /\b(?:in\s+)?(\d+)\s+octaves?\b/i;
80
- // "with degrees" / "with degrees in xl" / "with note names and degrees in lg"
81
- const DEGREE_DISPLAY_RE = /\bwith\s+(?:note\s+names?\s+and\s+)?degrees?(?:\s+(?:in\s+)?(base|lg|xl|2xl))?\b/i;
82
- const DEGREE_ONLY_RE = /\bwith\s+degrees?(?:\s+(?:in\s+)?(base|lg|xl|2xl))?\b/i;
83
- const NAMES_AND_DEGREES_RE = /\bwith\s+note\s+names?\s+and\s+degrees?(?:\s+(?:in\s+)?(base|lg|xl|2xl))?\b/i;
84
+ // "degrees" anywhere — combined with note names if present, standalone otherwise.
85
+ // The literal word "degree(s)" isn't used by any other parser rule
86
+ // (bass-degree / starting-degree use "5th", "9th", etc.), so a broad match is safe.
87
+ const DEGREES_KEYWORD_RE = /\bdegrees?(?:\s+(?:in\s+)?(base|lg|xl|2xl))?\b/i;
84
88
  // "with heading" / "with a heading" / "show heading"
85
89
  const HEADING_RE = /\b(?:with\s+)?(?:a\s+)?(?:show\s+)?heading\b/i;
90
+ // All recognized hand/clef phrases — long forms before shorthand to ensure
91
+ // the longest alternative is matched first under JS regex alternation.
92
+ const HAND_CLEF_PATTERN = "left\\s+hand|right\\s+hand|bottom\\s+hand|top\\s+hand|bass\\s+clef|treble\\s+clef|l\\.?h\\.?|r\\.?h\\.?|lh|rh|left|right|bottom|top|bass|treble";
93
+ // 2+ note tokens separated by spaces/commas/dashes; "and" allowed between tokens.
94
+ // Single-letter notes (A-G) plus optional accidental (#/b) and optional single-digit octave.
95
+ const NOTE_LIST_PATTERN = "[A-Ga-g][#b]?\\d?(?:[\\s,\\-]+(?:and\\s+)?[A-Ga-g][#b]?\\d?)+";
96
+ // "with notes C E G" / "notes E4 G4 C5" — optional trailing "in <hand|clef>".
97
+ const NOTES_GROUP_RE = new RegExp(`(?:with\\s+|and\\s+)?notes\\s+([A-Ga-g][#b]?\\d?\\b(?:[\\s,\\-]+[A-Ga-g][#b]?\\d?\\b)*)(?:\\s+in\\s+(?:the\\s+)?(${HAND_CLEF_PATTERN}))?`, "gi");
98
+ // "notes in lh Eb Gb Bb" / "notes in the right hand D F A" — prefix form.
99
+ const NOTES_GROUP_PREFIX_RE = new RegExp(`(?:with\\s+|and\\s+)?notes\\s+in\\s+(?:the\\s+)?(${HAND_CLEF_PATTERN})\\s+([A-Ga-g][#b]?\\d?\\b(?:[\\s,\\-]+[A-Ga-g][#b]?\\d?\\b)*)`, "gi");
100
+ // "lh Eb Gb Bb" / "lh: Eb Gb Bb" / "left Eb Gb Bb" / "bass clef C E G"
101
+ // Hand keyword first, no "notes" word. Optional colon between hand and notes.
102
+ const HAND_PREFIX_BARE_RE = new RegExp(`\\b(${HAND_CLEF_PATTERN})\\s*(?::\\s*|\\s+)(${NOTE_LIST_PATTERN})`, "gi");
103
+ // "Eb Gb Bb in lh" / "Eb Gb Bb lh" / "(Eb Gb Bb) lh" — notes first, hand after.
104
+ // "in" is optional. Surrounding parens optional. Requires 2+ notes to avoid
105
+ // swallowing chord symbols like "G7 in lh".
106
+ const NOTES_BARE_HAND_RE = new RegExp(`\\(?\\b(${NOTE_LIST_PATTERN})\\b\\)?\\s*(?:in\\s+(?:the\\s+)?)?(${HAND_CLEF_PATTERN})\\b`, "gi");
107
+ // Single bare note + hand variants. Restricted to [A-G][#b]? with no octave
108
+ // digit and no chord-quality suffix — that way "G7 in lh" / "Bb7 in lh" stay
109
+ // chord symbols (no \b between letter and digit), but "Bb in lh" works.
110
+ const SINGLE_NOTE_PATTERN = "[A-Ga-g][#b]?";
111
+ // "lh Bb" / "lh: Bb" / "left Bb" / "bass clef C" — hand keyword + single note.
112
+ // Lookahead requires the note to be followed by whitespace, comma, semicolon,
113
+ // or end-of-string so "lh G7" doesn't absorb G as a note.
114
+ const HAND_PREFIX_SINGLE_RE = new RegExp(`\\b(${HAND_CLEF_PATTERN})\\s*(?::\\s*|\\s+)(${SINGLE_NOTE_PATTERN})(?=[\\s,;]|$)`, "gi");
115
+ // "Bb in lh" / "Bb lh" / "(Bb) lh" — single bare note + hand.
116
+ const NOTE_BARE_HAND_SINGLE_RE = new RegExp(`\\(?\\b(${SINGLE_NOTE_PATTERN})\\b\\)?\\s*(?:in\\s+(?:the\\s+)?)?(${HAND_CLEF_PATTERN})\\b`, "gi");
117
+ // "Eb Gb Bb // Db Eb F Gb" — polychord-style "top over bottom" (rh then lh).
118
+ const POLYCHORD_SLASH_RE = new RegExp(`(${NOTE_LIST_PATTERN})\\s*\\/\\/\\s*(${NOTE_LIST_PATTERN})`, "gi");
119
+ // "Eb Gb Bb; Db Eb F Gb" — semicolon separator; reading order (lh then rh).
120
+ const SEMI_SEP_RE = new RegExp(`(${NOTE_LIST_PATTERN})\\s*;\\s*(${NOTE_LIST_PATTERN})`, "gi");
121
+ /** Normalize a captured hand/clef phrase to (hand, clef) tuple. */
122
+ function parseHandOrClef(raw) {
123
+ if (!raw)
124
+ return {};
125
+ const h = raw.toLowerCase().replace(/[\s.:]/g, "");
126
+ if (h === "bassclef" || h === "bass")
127
+ return { clef: "bass", hand: "lh" };
128
+ if (h === "trebleclef" || h === "treble")
129
+ return { clef: "treble", hand: "rh" };
130
+ if (h === "lefthand" || h === "bottomhand" || h === "lh" || h === "left" || h === "bottom")
131
+ return { hand: "lh" };
132
+ if (h === "righthand" || h === "tophand" || h === "rh" || h === "right" || h === "top")
133
+ return { hand: "rh" };
134
+ return {};
135
+ }
86
136
  // "boomwhacker" / "with boomwhacker theme" / "crf theme" / "rainbow"
87
137
  const THEME_RE = /\b(?:(?:with\s+)?(?:the\s+)?)?(?:(boomwhacker|boomwhackers|crf|rainbow)\s*(?:theme|colors?|colours?)?)\b/i;
88
138
  const THEME_MAP = {
@@ -105,7 +155,12 @@ const QUALITY_WORDS = {
105
155
  eleventh: "11",
106
156
  thirteenth: "13",
107
157
  };
108
- const CHORD_RE = /([A-Ga-g][#b]?)\s*(maj|min|m|aug|dim|sus|add|dom|M|°|ø|[0-9#b/]+)*/i;
158
+ // Slash-bass is captured as its own group (any note letter, not just B) rather
159
+ // than folded into the quality-suffix class — the old catch-all `[0-9#b/]+`
160
+ // let '/' bleed into the flat-symbol 'b', so only B/Bb bass notes round-tripped.
161
+ // `\/[0-9]+` stays in the quality group so "6/9"-style suffixes (slash
162
+ // followed by digits, not a bass letter) aren't mistaken for a slash bass.
163
+ const CHORD_RE = /([A-Ga-g][#b]?)\s*(maj|min|m|aug|dim|sus|add|dom|M|°|ø|\/[0-9]+|[0-9#b]+)*(\/[A-Ga-g][#b]?)?/i;
109
164
  function capitalizeNote(note) {
110
165
  return note.charAt(0).toUpperCase() + note.slice(1);
111
166
  }
@@ -271,25 +326,147 @@ export function parseChordDescription(input) {
271
326
  if (HEADING_RE.test(input)) {
272
327
  result.showHeading = true;
273
328
  }
329
+ // Extract explicit notes group(s) — supports one or more "with notes ... [in <hand/clef>]"
330
+ // segments separated by "and" / "with". Paired example:
331
+ // "notes C E G in bass clef and notes B D F in treble clef"
332
+ const groups = [];
333
+ const normalizeTokens = (raw) => raw
334
+ .split(/[\s,\-]+/)
335
+ .filter(Boolean)
336
+ .map((t) => {
337
+ const nm = t.match(/^([A-Ga-g])([#b])?(\d)?$/);
338
+ if (!nm)
339
+ return t;
340
+ return nm[1].toUpperCase() + (nm[2] ?? "") + (nm[3] ?? "");
341
+ });
342
+ // Note-group extraction runs in priority order. Each pass strips its matches
343
+ // from `residual` so later (looser) passes can't re-consume the same notes.
344
+ let residual = input;
345
+ const stripFromResidual = (match) => {
346
+ residual = residual.replace(match, " ");
347
+ };
348
+ const pushGroup = (tokens, hand, clef) => {
349
+ const g = { notes: tokens };
350
+ if (hand)
351
+ g.hand = hand;
352
+ if (clef)
353
+ g.clef = clef;
354
+ groups.push(g);
355
+ };
356
+ // 1. "notes in <hand> <notes>" (prefix with explicit "notes" keyword)
357
+ NOTES_GROUP_PREFIX_RE.lastIndex = 0;
358
+ for (const m of [...residual.matchAll(NOTES_GROUP_PREFIX_RE)]) {
359
+ const tokens = normalizeTokens(m[2]);
360
+ if (tokens.length === 0)
361
+ continue;
362
+ const { hand, clef } = parseHandOrClef(m[1]);
363
+ pushGroup(tokens, hand, clef);
364
+ stripFromResidual(m[0]);
365
+ }
366
+ // 2. "notes <notes> [in <hand>]" (suffix with explicit "notes" keyword)
367
+ NOTES_GROUP_RE.lastIndex = 0;
368
+ for (const m of [...residual.matchAll(NOTES_GROUP_RE)]) {
369
+ const tokens = normalizeTokens(m[1]);
370
+ if (tokens.length === 0)
371
+ continue;
372
+ const { hand, clef } = parseHandOrClef(m[2]);
373
+ pushGroup(tokens, hand, clef);
374
+ stripFromResidual(m[0]);
375
+ }
376
+ // 3. "lh Eb Gb Bb" / "lh: Eb Gb Bb" / "left Eb Gb Bb" / "bass clef C E G"
377
+ // Hand keyword first, no "notes" word required.
378
+ HAND_PREFIX_BARE_RE.lastIndex = 0;
379
+ for (const m of [...residual.matchAll(HAND_PREFIX_BARE_RE)]) {
380
+ const tokens = normalizeTokens(m[2].replace(/\band\b/gi, " "));
381
+ if (tokens.length < 2)
382
+ continue;
383
+ const { hand, clef } = parseHandOrClef(m[1]);
384
+ if (!hand && !clef)
385
+ continue;
386
+ pushGroup(tokens, hand, clef);
387
+ stripFromResidual(m[0]);
388
+ }
389
+ // 4. "Eb Gb Bb in lh" / "Eb Gb Bb lh" / "(Eb Gb Bb) lh" — bare notes + hand.
390
+ NOTES_BARE_HAND_RE.lastIndex = 0;
391
+ for (const m of [...residual.matchAll(NOTES_BARE_HAND_RE)]) {
392
+ const tokens = normalizeTokens(m[1].replace(/\band\b/gi, " "));
393
+ if (tokens.length < 2)
394
+ continue;
395
+ const { hand, clef } = parseHandOrClef(m[2]);
396
+ if (!hand && !clef)
397
+ continue;
398
+ pushGroup(tokens, hand, clef);
399
+ stripFromResidual(m[0]);
400
+ }
401
+ // 4b. "lh Bb" / "lh: Bb" / "left Bb" — single bare note after hand keyword.
402
+ // Runs AFTER the multi-note passes so a 3-note group is preferred where
403
+ // both could match. Anything left here is a genuine single-note assignment.
404
+ HAND_PREFIX_SINGLE_RE.lastIndex = 0;
405
+ for (const m of [...residual.matchAll(HAND_PREFIX_SINGLE_RE)]) {
406
+ const tokens = normalizeTokens(m[2]);
407
+ if (tokens.length === 0)
408
+ continue;
409
+ const { hand, clef } = parseHandOrClef(m[1]);
410
+ if (!hand && !clef)
411
+ continue;
412
+ pushGroup(tokens, hand, clef);
413
+ stripFromResidual(m[0]);
414
+ }
415
+ // 4c. "Bb in lh" / "Bb lh" / "(Bb) lh" — single bare note before hand keyword.
416
+ NOTE_BARE_HAND_SINGLE_RE.lastIndex = 0;
417
+ for (const m of [...residual.matchAll(NOTE_BARE_HAND_SINGLE_RE)]) {
418
+ const tokens = normalizeTokens(m[1]);
419
+ if (tokens.length === 0)
420
+ continue;
421
+ const { hand, clef } = parseHandOrClef(m[2]);
422
+ if (!hand && !clef)
423
+ continue;
424
+ pushGroup(tokens, hand, clef);
425
+ stripFromResidual(m[0]);
426
+ }
427
+ // 5. "Eb Gb Bb // Db Eb F Gb" — polychord-style "top over bottom" (rh, lh).
428
+ POLYCHORD_SLASH_RE.lastIndex = 0;
429
+ for (const m of [...residual.matchAll(POLYCHORD_SLASH_RE)]) {
430
+ const top = normalizeTokens(m[1].replace(/\band\b/gi, " "));
431
+ const bottom = normalizeTokens(m[2].replace(/\band\b/gi, " "));
432
+ if (top.length < 2 || bottom.length < 2)
433
+ continue;
434
+ pushGroup(top, "rh");
435
+ pushGroup(bottom, "lh");
436
+ stripFromResidual(m[0]);
437
+ }
438
+ // 6. "Eb Gb Bb; Db Eb F Gb" — semicolon separator; reading order (lh, rh).
439
+ SEMI_SEP_RE.lastIndex = 0;
440
+ for (const m of [...residual.matchAll(SEMI_SEP_RE)]) {
441
+ const first = normalizeTokens(m[1].replace(/\band\b/gi, " "));
442
+ const second = normalizeTokens(m[2].replace(/\band\b/gi, " "));
443
+ if (first.length < 2 || second.length < 2)
444
+ continue;
445
+ pushGroup(first, "lh");
446
+ pushGroup(second, "rh");
447
+ stripFromResidual(m[0]);
448
+ }
449
+ if (groups.length > 0) {
450
+ result.notesGroups = groups;
451
+ }
274
452
  // Extract color theme
275
453
  const themeMatch = input.match(THEME_RE);
276
454
  if (themeMatch) {
277
455
  result.colorTheme = THEME_MAP[themeMatch[1].toLowerCase()] ?? themeMatch[1].toLowerCase();
278
456
  }
279
- // Extract degree display mode (before scale detection, since it applies to both)
280
- const namesDegMatch = input.match(NAMES_AND_DEGREES_RE);
281
- const degOnlyMatch = input.match(DEGREE_ONLY_RE);
282
- if (namesDegMatch) {
283
- result.showNoteNames = true;
284
- result.noteNameMode = "pitch-class+degree";
285
- const sz = toTextSize(namesDegMatch[1]);
286
- if (sz)
287
- result.noteNameSize = sz;
288
- }
289
- else if (degOnlyMatch) {
290
- result.showNoteNames = true;
291
- result.noteNameMode = "degree";
292
- const sz = toTextSize(degOnlyMatch[1]);
457
+ // Degrees keyword is independent — combines with note names if already detected,
458
+ // otherwise stands alone as degree-only mode. Skipped if MIDI names are active
459
+ // since "midi+degree" isn't a supported display mode.
460
+ const degMatch = input.match(DEGREES_KEYWORD_RE);
461
+ if (degMatch && result.noteNameMode !== "midi") {
462
+ if (result.showNoteNames) {
463
+ result.noteNameMode = "pitch-class+degree";
464
+ }
465
+ else {
466
+ result.showNoteNames = true;
467
+ result.noteNameMode = "degree";
468
+ }
469
+ const sz = toTextSize(degMatch[1]);
293
470
  if (sz)
294
471
  result.noteNameSize = sz;
295
472
  }
@@ -350,14 +527,21 @@ export function parseChordDescription(input) {
350
527
  .replace(OVER_BASS_NOTE_RE, "")
351
528
  .replace(STARTING_DEGREE_RE, "")
352
529
  .replace(STARTING_NOTE_RE, "")
353
- .replace(NAMES_AND_DEGREES_RE, "")
354
- .replace(DEGREE_DISPLAY_RE, "")
530
+ .replace(DEGREES_KEYWORD_RE, "")
355
531
  .replace(DIRECTION_RE, "")
356
532
  .replace(OCTAVES_RE, "")
357
533
  .replace(SCALE_UNAMBIGUOUS_RE, "")
358
534
  .replace(SCALE_EXPLICIT_RE, "")
359
535
  .replace(/\bscale\b/gi, "")
360
536
  .replace(HEADING_RE, "")
537
+ .replace(NOTES_GROUP_PREFIX_RE, "")
538
+ .replace(NOTES_GROUP_RE, "")
539
+ .replace(HAND_PREFIX_BARE_RE, "")
540
+ .replace(NOTES_BARE_HAND_RE, "")
541
+ .replace(HAND_PREFIX_SINGLE_RE, "")
542
+ .replace(NOTE_BARE_HAND_SINGLE_RE, "")
543
+ .replace(POLYCHORD_SLASH_RE, "")
544
+ .replace(SEMI_SEP_RE, "")
361
545
  .replace(THEME_RE, "")
362
546
  .replace(/\btheme\b/gi, "")
363
547
  .replace(/\bcolou?rs?\b/gi, "")
@@ -396,9 +580,11 @@ export function parseChordDescription(input) {
396
580
  const chordMatch = cleaned.match(CHORD_RE);
397
581
  if (chordMatch) {
398
582
  const root = capitalizeNote(chordMatch[1]);
399
- const fullMatch = chordMatch[0];
400
- const afterRoot = fullMatch.slice(chordMatch[1].length);
401
- result.chordName = root + afterRoot.trim();
583
+ const afterRoot = chordMatch[0]
584
+ .slice(chordMatch[1].length)
585
+ .trim()
586
+ .replace(/\/([A-Ga-g])/, (_m, letter) => `/${letter.toUpperCase()}`);
587
+ result.chordName = root + afterRoot;
402
588
  }
403
589
  }
404
590
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"natural-language.js","sourceRoot":"","sources":["../../src/parser/natural-language.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"natural-language.js","sourceRoot":"","sources":["../../src/parser/natural-language.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -58,6 +58,23 @@ export interface ParsedChordRequest {
58
58
  colorTheme?: string;
59
59
  /** Display scale (0–1+ range, e.g. 0.8 = 80%). */
60
60
  scale?: number;
61
+ /**
62
+ * Explicit notes groups ("with notes ..."), each low to high. Multiple groups
63
+ * (e.g. "C E G in bass clef and B D F in treble clef") render on one keyboard.
64
+ */
65
+ notesGroups?: NotesGroup[];
66
+ }
67
+ /**
68
+ * One group of explicitly-specified notes. Tokens are pitch classes with
69
+ * optional octave (e.g. "C", "Eb", "E4", "Bb3"). Missing octaves are inferred
70
+ * ascending from a base octave (treble clef = 4, bass clef = 3, default = 4).
71
+ */
72
+ export interface NotesGroup {
73
+ notes: string[];
74
+ /** Hand assignment for this group: "lh" or "rh". Derived from clef if absent. */
75
+ hand?: "lh" | "rh";
76
+ /** Clef context: affects inferred base octave and implies a hand. */
77
+ clef?: "bass" | "treble";
61
78
  }
62
79
  export interface KeyDescriptor {
63
80
  note: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pepperhorn/chordl-core",
3
- "version": "0.3.0",
3
+ "version": "0.3.4",
4
4
  "description": "Pure TypeScript chord parsing, resolving, layout, and export engine",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",