<?xml version="1.0"?>
<Denemo>
  <merge>
    <title>A Denemo Keymap</title>
    <author>AT, JRR, RTS</author>
    <map>
      <row>
        <after>EditScoreDirective</after>
        <action>CheckScore</action>
        <scheme>;;;;;;;;;CheckScore
(define CheckScore::return #t)
(while (d-PreviousMovement))
(let movement ()
  (d-EvenOutStaffLengths)
  (let staff ()
   	(d-FixSlursInStaff)   	
   	(d-CheckTiesInStaff)
   	(set! CheckScore::return CheckTiesInStaff::return)
   	(if CheckTiesInStaff::return
 	 	(if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
		(staff))))
   (if CheckScore::return
      (begin
   	(while (d-MoveToStaffUp))	
   	(let staff ()
 		(d-MoveToBeginning)
 		(let measure ()
 			(d-CheckTupletsInMeasure)			
 			(set! CheckScore::return CheckTupletsInMeasure::return)
 			(if CheckScore::return
 				(if (d-MoveToMeasureRight)
 					(measure))
  				 (if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
				(staff)))))
	(if CheckScore::return
  	  (let staff ()
   	    (d-ReBar #t)
   	    (set! CheckScore::return ReBar::return)
      	    (if CheckScore::return
      			(begin 
				(if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
				(staff))))
				(if (d-NextMovement)
	  				(movement)))))))
</scheme>
        <label>Check Score</label>
        <tooltip>Checks score for wrong measure durations, unterminated tuplets, slurs, wrong ties etc.</tooltip>
      </row>
    </map>
  </merge>
</Denemo>
