BEGIN
iconNameRope, iconLabelRope, iconTypeRope, iconIconRope, iconArgumentRope: ROPE;
x, y: INTEGER;
[] ← in.SkipWhitespace[];
x ← in.GetInt[];
[] ← in.SkipWhitespace[];
y ← in.GetInt[];
[] ← in.SkipWhitespace[];
iconNameRope ← in.GetTokenRope[breakProc: IconBreakProc].token;
[] ← in.GetChar[]; --read dividing "|"
iconLabelRope ← in.GetTokenRope[breakProc: IconBreakProc].token;
IF Rope.Equal[iconLabelRope, "-"] THEN iconLabelRope ← NIL;
[] ← in.GetChar[]; --read dividing "|"
iconTypeRope ← in.GetTokenRope[breakProc: IconBreakProc].token;
[] ← in.GetChar[]; --read dividing "|"
iconIconRope ← in.GetTokenRope[breakProc: IconBreakProc].token;
IF Rope.Equal[iconIconRope, "-"] THEN iconIconRope ← NIL;
[] ← in.GetChar[]; --read dividing "|"
iconArgumentRope ← in.GetTokenRope[breakProc: IconBreakProc].token;
IF Rope.Equal[iconArgumentRope, "-"] THEN iconArgumentRope ← NIL;
[] ← in.GetChar[]; --read trailing ")"
[] ← NewIcon[wb, x, y, iconNameRope, iconLabelRope, iconIconRope, iconArgumentRope, Atom.MakeAtom[iconTypeRope]]
END;