code: Rule Key() {
  		return FirstOf(
  			SequenceS(KeyDef(),
  					OptionalS(SequenceS(
  							OptionalS(suppr(WSPS())),
  							Clef()
  					)),
  					OptionalS(Parameters())
  			),
  			Clef(),
  			String("HP"),
  			String("Hp")
  		).label(Key);
  	}
docs: key ::= (key-def [1*WSP clef]) / clef / "HP" / "Hp"