Module: dfmc-reader Synopsis: Fragment presentation and print methods. Author: Keith Playford Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. 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 //// Fragment presentation. define method present (f , s :: ) format(s, "{UNKNOWN-FRAGMENT %s}", object-class(f)); end method; define method present (f :: , s :: ) present-fragments(f, s); end method; define method present (f :: , s :: ) present-fragments(fragment-fragments(f), s); end method; define method present (f :: , s :: ) printing-object (f, s) end; end method; define method present (f :: , s :: ) format(s, "%=", fragment-value(f)); end method; define method present (f :: , s :: ) format(s, "#\"%s\"", as-lowercase(as(, fragment-value(f)))); end method; define method present (f :: , s :: ) format(s, "%s:", as-lowercase(as(, fragment-value(f)))); end method; define method present (f :: , s :: ) write-element(s, '.'); end method; define method present (f :: , s :: ) write-element(s, ','); pprint-newline(#"linear", s); end method; define method present (f :: , s :: ) write-element(s, ';'); pprint-newline(#"linear", s); end method; define method present (f :: , s :: ) write(s, "#next"); end method; define method present (f :: , s :: ) write(s, "#rest"); end method; define method present (f :: , s :: ) write(s, "#key"); end method; define method present (f :: , s :: ) write(s, "#all-keys"); end method; define method present (f :: , s :: ) write-element(s, '('); end method; define method present (f :: , s :: ) write-element(s, ')'); // pprint-newline(#"fill", s); end method; define method present (f :: , s :: ) write-element(s, '['); end method; define method present (f :: , s :: ) write-element(s, ']'); // pprint-newline(#"fill", s); end method; define method present (f :: , s :: ) write-element(s, '{'); end method; define method present (f :: , s :: ) write-element(s, '}'); // pprint-newline(#"fill", s); end method; define method present (f :: , s :: ) write(s, "#("); end method; define method present (f :: , s :: ) write(s, "#["); end method; define method present (f :: , s :: ) write(s, "::"); end method; define method present (f :: , s :: ) write(s, "=>"); end method; define method present (f :: , s :: ) write(s, as-lowercase(as(, fragment-name(f)))); if (fragment-origin(f)) // write(s, "@macro"); end; end method; define method present (f :: , s :: ) write-element(s, '\\'); next-method(); end method; define method present (f :: , s :: ) write(s, as-lowercase(as(, fragment-name(f)))); end method; define method present (f :: , s :: ) present(fragment-function(f), s); write-element(s, '('); present-list(fragment-arguments(f), s); write-element(s, ')'); end method; define method present (f :: , s :: ) present(fragment-arguments(f).head, s); write-element(s, '['); present-list(fragment-arguments(f).tail, s); write-element(s, ']'); end method; define method present (f :: , s :: ) present(fragment-arguments(f).head, s); write-element(s, '.'); present(fragment-function(f), s); end method; define method present (f :: , s :: ) write-element(s, '('); present(fragment-arguments(f).first, s); write-element(s, ' '); present(fragment-function(f), s); write-element(s, ' '); present(fragment-arguments(f).second, s); write-element(s, ')'); end method; define method present (f :: , s :: ) write-element(s, '('); present(fragment-function(f), s); present(fragment-arguments(f).first, s); write-element(s, ')'); end method; define method present (f :: , s :: ) printing-logical-block (s, prefix: "(", suffix: ")") present-fragments(fragment-nested-fragments(f), s); end; // pprint-newline(#"fill", s); /* write-element(s, '('); present-fragments(fragment-nested-fragments(f), s); write-element(s, ')'); */ end method; define method present (f :: , s :: ) printing-logical-block (s, prefix: "[", suffix: "]") present-fragments(fragment-nested-fragments(f), s); end; // pprint-newline(#"fill", s); /* write-element(s, '['); present-fragments(fragment-nested-fragments(f), s); write-element(s, ']'); */ end method; define method present (f :: , s :: ) printing-logical-block (s, prefix: "{", suffix: "}") present-fragments(fragment-nested-fragments(f), s); end; // pprint-newline(#"fill", s); /* write(s, "{ "); present-fragments(fragment-nested-fragments(f), s); write(s, " }"); */ end method; define method present (f :: , s :: ) write(s, "(begin "); present-constituents(fragment-constituents(f), s); write(s, " end)"); pprint-newline(#"linear", s); end method; define method present (f :: , s :: ) present(fragment-macro(f), s); write-element(s, ' '); present-fragments(fragment-list-fragment(f), s); end method; define method present (f :: , s :: ) write(s, "(begin "); present(fragment-declaration-fragment(f), s); write(s, "; "); present(fragment-body-fragment(f), s); write(s, " end)"); end method; define method present (f :: , s :: ) present(fragment-macro(f), s); write(s, " "); present-fragments(fragment-argument(f), s); write(s, " end"); end method; define method present (f :: , s :: ) present(fragment-macro(f), s); write(s, "("); present-fragments(fragment-argument(f), s); write(s, ")"); end method; define method present (f :: , s :: ) write(s, "define "); let mods = fragment-modifiers(f); if (mods) present-fragments(mods, s); write(s, " "); end; present(fragment-define-word(f), s); write(s, " "); present(fragment-body-fragment(f), s); write(s, " end"); end method; define method present (f :: , s :: ) write(s, "define "); let mods = fragment-modifiers(f); if (mods) present-fragments(mods, s); write(s, " "); end; write(s, " "); present(fragment-define-word(f), s); write(s, " "); present(fragment-list-fragment(f), s); end method; define method present (f :: , s :: ) format(s, "%s:%s", as-lowercase(as(, fragment-name(f))), as-lowercase(as(, fragment-constraint(f)))); end method; define method present (f :: , s :: ) write(s, "?"); end method; define method present (f :: , s :: ) write(s, "??"); end method; define method present (f :: , s :: ) write(s, "?="); end method; define method present (f :: , s :: ) if (f.fragment-prefix) format(s, "%= ## ", f.fragment-prefix); end; write-element(s, '?'); present(fragment-pattern-variable(f), s); if (f.fragment-suffix) format(s, " ## %=", f.fragment-prefix); end; end method; define method present (f :: , s :: ) write(s, "..."); end method; define method present-list (l :: , s) present-list(list(l), s); end method; define method present-list (l, s) for (first = #t then #f, f in l) if (~first) write(s, ", "); pprint-newline(#"linear", s) end; present(f, s); end; end method; define method present-constituents (l, s) for (first = #t then #f, f in l) if (~first) write(s, "; "); pprint-newline(#"linear", s) end; present(f, s); end; end method; define method print-object (f :: , s :: ) => () if (*print-escape?*) format(s, "#P{ ") end; present(f, s); if (*print-escape?*) format(s, " }") end; end method; //// Template presentation. // U -> "Unparsed" // S -> "Shallow-parsed" define method print-object (f ::