static Web webFromTriple(CharSequence a, CharSequence b, CharSequence c) { ret webFromTriple(triple(symbol(a), symbol(b), symbol(c))); } static Web webFromTriple(Triple t) { if (t == null) null; ret webFromTriple(t, 0.2, 0.2, 0.8, 0.7); } static Web webFromTriple(Triple t, double x1, double y1, double x2, double y2) { if (t == null) null; Web web = webWithoutIndexAndLock(); // save space S a = unnull(str(t.a)), b = unnull(str(t.b)), c = unnull(str(t.c)); // ensure we are making 3 nodes, even if texts are identical // ("singular is singular") WebNode nodeA = web.newNode(a), nodeC = web.newNode(c); web_addRelation(nodeA, nodeC, b); web_setPosition(first(web.nodes), x1, y1); web_setPosition(second(web.nodes), x2, y2); if (t instanceof TripleWeb) { TripleWeb w = cast t; web.globalID = w.globalID(); web.created = w.created(); web.source = w.source(); web.unverified = w.unverified(); } ret web; }