Revision history for Music-NWC2MusicXML

0.002.2	Fri Oct 30 04:14:18 PM EDT 2026
	[ Bug Fixes ]
	- Parser: NWCTXT files produced by some NWC versions spell the hairpin
	  dynamic record as DynamicVariance instead of the abbreviated DynVariance.
	  Added DynamicVariance as an alias in the dispatch table so crescendo,
	  diminuendo, and hairpin-off markings are parsed correctly from both spellings.

0.002.1	Mon Oct 12 04:14:34 PM EDT 2026
	[ Bug Fixes ]
	- NWC TempoVariance:Fermata records were emitted as a text direction
	  (<words font-style="italic">Fermata</words>) instead of the correct
	  MusicXML <fermata/> notation element on the decorated note or rest.
	  Fermata symbols now appear as <notations><fermata/></notations> on the
	  sounding event that immediately follows the TempoVariance:Fermata record.

0.002.0	Fri Oct  9 08:39:33 PM EDT 2026
	[ Bug Fixes ]
	- MusicXML::_annotate_events: slur_stop was placed on the last note carrying
	  the Slur token rather than on the landing note (the first following note
	  without Slur).  For the common single-note slur this produced a zero-length
	  arc with start and stop on the same note.
	- NWC::read: suppress autodie on the open() call so the "Cannot read file"
	  croak fires correctly on Cygwin, where -r returns true for chmod 0000 files
	  due to imprecise Windows ACL mapping.
	  fixes https://matrix.perl-magpie.org/results/dbc4dafe-7e31-1014-904b-aa3c0773776a
	[ Enhancements ]
	- Score::validate now performs per-staff checks when --validate is passed:
	  empty staff detection, measure-duration consistency against the active
	  time signature, unmatched tie detection, and unclosed slur detection.

0.001.1	Fri Sep 19 12:00:00 PM EDT 2026
	[ Bug Fixes]
	- Fix Test Dashboard URL
	- Bump minimum version of Params::Validate::Strict
	  fixes https://matrix.perl-magpie.org/results/c463e98e-b3b3-11f1-9d51-cce2e4961366

0.001.0	Fri Sep 18 12:49:11 PM EDT 2026
      Initial CPAN release. Fully functional NWC-to-MusicXML conversion pipeline.

      Core modules:
      - Music::NWC2MusicXML         -- top-level facade; single-file and batch conversion.
      - Music::NWC2MusicXML::NWC    -- NWC 2.x binary container decoder (zlib decompression).
      - Music::NWC2MusicXML::Parser -- NWCTXT text parser producing Score/Staff/Event trees.
      - Music::NWC2MusicXML::Score  -- internal score model.
      - Music::NWC2MusicXML::Staff  -- internal staff model.
      - Music::NWC2MusicXML::Event  -- internal event model with exact rational durations.
      - Music::NWC2MusicXML::MusicXML -- MusicXML 4.0 generator.
      - Music::NWC2MusicXML::Diagnostics -- i18n warning/logging subsystem.
      - bin/nwc2musicxml            -- command-line interface.

      MusicXML features emitted:
      - Notes, chords, rests (all NWC durations; dotted, double-dotted, triplets).
      - Grace notes (<grace/> element; duration omitted per MusicXML schema).
      - Slurs (numbered 1-6 for simultaneous arcs), ties, articulations, ornaments.
      - Clef, key-signature, and time-signature changes (initial and mid-staff).
      - Transposing instruments (<transpose><chromatic>).
      - Tempo and tempo-variance directions (metronome, rit., accel., etc.).
      - Dynamic markings with per-staff MIDI velocity (DynVel) mapping.
      - Hairpin crescendo/diminuendo wedges.
      - Text directions, flow-control marks (coda, segno, D.C., D.S., Fine, ...).
      - Lyrics with syllabic type (begin/middle/end/single).
      - Part groups (bracket and brace) from WithNextStaff flags.
      - MIDI channel, program, volume, and pan from NWC staff properties.
      - Visible/hidden staves (print-object="no" on part-name).
      - Custom ending barlines from NWC EndingBar property.
      - Asymmetric page margins (Left/Right/Top/Bottom from PgMargins).
      - Word-font and lyric-font defaults from NWC Font records.
      - Score metadata: title, author, lyricist, copyright, comments.
      - Repeat barlines (MasterRepeatOpen/Close, LocalRepeatOpen/Close).
      - Double, section-close, and other barline styles.

      CLI features:
      - Single-file and batch conversion.
      - Recursive directory scanning (--recursive).
      - Selectable output directory (--output-dir).
      - Overwrite guard (--overwrite).
      - Warning log file (--warnings).
      - Extended consistency validation (--validate).
