@@ -950,6 +950,11 @@ private async void buttonCreate_Click(object sender, EventArgs e)
950950 output = Regex . Replace ( output , @"\bFsharp(\d+)\b" , "F#$1" , RegexOptions . IgnoreCase ) ;
951951 output = Regex . Replace ( output , @"\bGsharp(\d+)\b" , "G#$1" , RegexOptions . IgnoreCase ) ;
952952 output = Regex . Replace ( output , @"\bAsharp(\d+)\b" , "A#$1" , RegexOptions . IgnoreCase ) ;
953+ output = Regex . Replace ( output , @"\bCs(\d+)\b" , "C#$1" , RegexOptions . IgnoreCase ) ;
954+ output = Regex . Replace ( output , @"\bDs(\d+)\b" , "D#$1" , RegexOptions . IgnoreCase ) ;
955+ output = Regex . Replace ( output , @"\bFs(\d+)\b" , "F#$1" , RegexOptions . IgnoreCase ) ;
956+ output = Regex . Replace ( output , @"\bGs(\d+)\b" , "G#$1" , RegexOptions . IgnoreCase ) ;
957+ output = Regex . Replace ( output , @"\bAs(\d+)\b" , "A#$1" , RegexOptions . IgnoreCase ) ;
953958 output = Regex . Replace ( output , @"\bR(\d+)\b" , string . Empty , RegexOptions . IgnoreCase ) ;
954959 output = Regex . Replace ( output , @"<Note(\d)>\s*(?:Rest|REST|rest|\-+)?\s*</Note(\d)>" , m => $ "<Note{ m . Groups [ 1 ] . Value } ></Note{ m . Groups [ 2 ] . Value } >", RegexOptions . Singleline ) ;
955960 output = Regex . Replace ( output , @"<Note(\d)>\s*None\s*</Note(\d)>" , m => $ "<Note{ m . Groups [ 1 ] . Value } ></Note{ m . Groups [ 2 ] . Value } >", RegexOptions . Singleline | RegexOptions . IgnoreCase ) ;
@@ -980,9 +985,25 @@ private async void buttonCreate_Click(object sender, EventArgs e)
980985 "<${tag}>$2</${tag}>" ,
981986 RegexOptions . Singleline
982987 ) ;
988+ // Fix TimeSignature if written as a fraction due to hallucination
989+ output = Regex . Replace (
990+ output ,
991+ @"<TimeSignature>\s*(\d+)\s*/\s*\d+\s*</TimeSignature>" ,
992+ m => $ "<TimeSignature>{ m . Groups [ 1 ] . Value } </TimeSignature>",
993+ RegexOptions . IgnoreCase
994+ ) ;
983995 // Trim leading/trailing whitespace
984996 output = output . Trim ( ) ;
985997 output = RewriteOutput ( output ) . Trim ( ) ;
998+ if ( ! IsCompleteNBPML ( output ) ) // Check for completeness of NBPML content
999+ {
1000+ Logger . Log ( "Generated output is incomplete NBPML content." , Logger . LogTypes . Error ) ;
1001+ MessageForm . Show ( Resources . MessageIncompleteNBPMLContent , Resources . TitleIncompleteNBPMLContent , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
1002+ generatedFilename = string . Empty ; // Clear the filename if it's incomplete
1003+ output = String . Empty ; // Clear the output if it's incomplete
1004+ this . Close ( ) ; // Close the form after handling the incomplete output
1005+ return ; // Exit the method
1006+ }
9861007 if ( ! CheckIfOutputIsJSONErrorMessage ( JSONText ) )
9871008 {
9881009 Logger . Log ( "Output: " + output , Logger . LogTypes . Info ) ;
@@ -1424,6 +1445,14 @@ private string RewriteOutput(string output)
14241445 output = output . Trim ( ) ;
14251446 return output ;
14261447 }
1448+ private bool IsCompleteNBPML ( string NBPMLDocument ) // Check if the NBPML document has all required sections
1449+ {
1450+ bool isComplete = Regex . Matches ( NBPMLDocument , @"<NeoBleeperProjectFile>" ) . Count == 1 &&
1451+ Regex . Matches ( NBPMLDocument , @"</NeoBleeperProjectFile>" ) . Count == 1 &&
1452+ Regex . Matches ( NBPMLDocument , @"<LineList>" ) . Count == 1 &&
1453+ Regex . Matches ( NBPMLDocument , @"</LineList>" ) . Count == 1 ;
1454+ return isComplete ; // Return true if all required sections are present
1455+ }
14271456 private string FixParameterNames ( string xmlContent )
14281457 {
14291458 if ( string . IsNullOrEmpty ( xmlContent ) )
@@ -1612,12 +1641,19 @@ private string SynchronizeLengths(string xmlContent)
16121641 } ,
16131642 RegexOptions . Multiline | RegexOptions . IgnoreCase
16141643 ) ;
1644+ // Fix to remove extra space before tag names
1645+ output = Regex . Replace ( output , @"<\s+/?" , m => m . Value . Replace ( " " , "" ) , RegexOptions . Multiline ) ;
1646+ output = Regex . Replace ( output , @"</\s+" , "</" , RegexOptions . Multiline ) ;
16151647 // Trim and normalize the XML content
16161648 xmlContent = Regex . Replace ( xmlContent , @"^[\s\S]*(<NeoBleeperProjectFile>)" , "$1" , RegexOptions . IgnoreCase ) ;
16171649 xmlContent = Regex . Replace ( xmlContent , @"</<(\w+)>" , @"</$1>" ) ;
16181650 xmlContent = Regex . Replace (
16191651 xmlContent , @"<\?xml.*?\?>" , string . Empty , RegexOptions . IgnoreCase ) ;
16201652 //Debug.WriteLine(xmlContent); // For debugging purposes
1653+ if ( ! IsCompleteNBPML ( xmlContent ) )
1654+ {
1655+ return xmlContent ; // Return original content if not complete
1656+ }
16211657 // Load the XML content into an XmlDocument
16221658 var xmlDoc = new System . Xml . XmlDocument ( ) ;
16231659 xmlDoc . LoadXml ( xmlContent ) ;
0 commit comments