Option Explicit ' Audit1.vbs, ver 1.0, Rick G.
' NWC2 UserTool to restore some accidentals after audit
' &Command: WScript Scripts\Audit1.vbs
Dim d: Set d = CreateObject("Scripting.Dictionary")
Dim a1, a2, e, i, n, s, s1
Dim aIn: aIn = Split(WScript.StdIn.ReadAll, vbCrLf)
For i = 1 To UBound(aIn) - 2
	a1 = Split(aIn(i), "|")
	Select Case a1(1)
		Case "Note", "Chord", "RestChord"
			If UBound(Filter(a1, "Visibility:Never")) > -1 Then
				For Each e In Filter(a1, "Pos")
					For Each s In Split(Split(e, ":")(1), ",")
						a2 = aPos5(s)
						If Len(a2(0)) Then	d(a2(1)) = a2(0)
					Next
				Next
			Else
				For n = 3 To UBound(a1)
					e = a1(n)
					If Left(e, 3) = "Pos" Then
						For Each s In Split(Split(e, ":")(1), ",")
							a2 = aPos5(s)
							If d.Exists(a2(1)) Then a2(0) = d(a2(1)): d.Remove a2(1)
							s1 = s1 & "," & Join(a2, "")
						Next
						a1(n) = Split(e, ":")(0) & ":" & Mid(s1, 2): s1 = ""
					End If	
				Next
				aIn(i) = Join(a1, "|")
			End If
		Case "Bar"
			d.RemoveAll
	End Select
Next
WScript.Stdout.Write Join(aIn, vbCrLf)

Function aPos5(ByVal s) ' NotePos to array
	Dim r(4), e ' retval, element
	If InStr("nb#xv", Left(s, 1)) Then r(0) = Left(s, 1) ' accidental
	If InStr(s, "^") Then	r(3) = "^" ' tie
	If InStr(s, "!") Then r(4) = Mid(s, InStr(s, "!"), 2) ' color
	For Each e In r: s = Replace(s, e, "", 1, 1): Next
	If Not IsNumeric(s) Then r(2) = Right(s, 1) ' notehead
	r(1) = Replace(s, r(2), "")
	aPos5 = r ' acc, pos, head, tie, color
End Function