public static object[] tour(object graph, List<string> ns, Dictionary<string, string> aliases) { Guide guide = new Guide(); AtomBox outbox = new AtomBox(); ListBox collection = new ListBox(); Dictionary<object, object> symtab = new Dictionary<object, object>(); add_namespace_directives(ns, aliases, collection); ConstructSiteseer construct = new ConstructSiteseer(outbox, collection, ns, symtab, aliases); guide.tour(graph, construct); return ((object[])outbox.value); }
public bool view_part(Site site, out ISiteseer new_siteseer) { m_count++; if (site.type != null) { object[] attrib = site.type.GetCustomAttributes(typeof(LiteralFieldAttribute), true); if (attrib.Length > 0) { FieldInfo fi = site.type.GetField(((LiteralFieldAttribute)attrib[0]).field); if (fi != null) { m_collection.put(fi.GetValue(site.value)); new_siteseer = null; return true; } } } if (Literal.is_atom_type(site.value)) { new_siteseer = null; if (site.value is Symbol) { m_collection.put(new Cons(Abbrev.quote, new Cons(site.value))); } else /*if (site.value != null)*/ { object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false); if (sitelist.Length > 0 || site.value != null) m_collection.put(site.value); } return true; } else { if (site.type != null) { object[] attrib = site.type.GetCustomAttributes(typeof(RepresentativeFieldAttribute), true); FieldInfo fi; if (attrib.Length > 0) { fi = site.type.GetField(((RepresentativeFieldAttribute)attrib[0]).field); if (fi != null) { object name = fi.GetValue(site.value); if (name != null) { object sym; bool was_defined = m_symtab.TryGetValue(name, out sym); if (was_defined) { if (sym == site.value) { m_collection.put(name); new_siteseer = null; return true; } else { throw new Exception(); } } else { m_symtab.Add(name, site.value); } } } } if (site.value is object[]) { ListBox list = new ListBox(); new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases); return true; } else if (site.value is Cons) { m_collection.put(site.value); new_siteseer = null; return true; } else { object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false); string name = resolve(site.type.Namespace, site.type.FullName, site.type.Name); if (site.name != null && sitelist.Length == 0) name = String.Format("{0}#{1}", name, site.name); ProperListBox list = new ProperListBox(); ((IBox)list).put(Symbol.get_symbol(name)); new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases); return true; } } else { new_siteseer = null; return true; } } }