Module: jam-internals Author: Peter S. Housel Copyright: Original Code is Copyright 2004 Gwydion Dylan Maintainers All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND define function extract-grist (name :: ) => (grist :: ); if (name.size > 1 & name[0] == '<') let grist-end = find-key(name, curry(\==, '>')); if (grist-end) copy-sequence(name, end: grist-end + 1) else "" end if else "" end if end function; define function strip-grist (name :: ) => (result :: ); if (name.size > 1 & name[0] == '<') let grist-end = find-key(name, curry(\==, '>')); if (grist-end) copy-sequence(name, start: grist-end + 1) else name end if else name end if end function; define function add-grist (old :: , new :: ) => (result :: ); let old-grist = extract-grist(old); if (old-grist.empty?) new else concatenate(old-grist, new) end if end function;