//---------------------------------------------------------------------------- // int HypGraph::setDrawBackTo(string URL, int on, int descend) //............................................................................ // //---------------------------------------------------------------------------- int HypGraph::setDrawBackTo(string URL, int on, int descend) { int i; if ((i = findUrl(URL)) >= 0) { nodes[i]->setEnabledIncoming(on, descend); } else if (URL == "HV_TOPNODE") { nodes[0]->setEnabledIncoming(on, descend); } else { return 0; } return 1; }
//---------------------------------------------------------------------------- // HypTransform HypGraph::getNodePosition(string URL) //............................................................................ // //---------------------------------------------------------------------------- HypTransform HypGraph::getNodePosition(string URL) { int i; HypTransform T; if ((i = findUrl(URL)) >= 0) { HypNode *n = nodes[i]; T = nodes[i]->getC(); } else { T.identity(); } return T; }
//---------------------------------------------------------------------------- // int HypGraph::setNodeGroup(string URL, int groupkey, string group) //............................................................................ // //---------------------------------------------------------------------------- int HypGraph::setNodeGroup(string URL, int groupkey, string group) { int i; if ((i = findUrl(URL)) >= 0) { nodes[i]->setGroup(groupkey, group.c_str()); if (groupkey == hd->groupKey) { markEnable(nodes[i]); } return 1; } else { return 0; } }
//---------------------------------------------------------------------------- // StringArray HypGraph::enumerateSubtree(string URL, int levels) //............................................................................ // //---------------------------------------------------------------------------- StringArray HypGraph::enumerateSubtree(string URL, int levels) { StringArray strs; int i; if ((i = findUrl(URL)) >= 0) { if (nodes[i]->getEnabled()) { HypNode *n = nodes[i]; int foo = levels; StringArray strs2 = n->enumerateSubtree(foo); strs.insert(strs.end(),strs2.begin(),strs2.end()); } } return strs; }
bool LLUrlRegistry::hasUrl(const LLWString &text) { LLUrlMatch match; return findUrl(text, match); }
//---------------------------------------------------------------------------- // void HypGraph::loadSpanGraph(istream & flat) //............................................................................ // //---------------------------------------------------------------------------- void HypGraph::loadSpanGraph(istream & flat) { unsigned linepos = 0; HypNode *current = NULL; HypNode *descend = NULL; string id, type, mainid, line; string token; StringArray groups; int level; static string whitespace = " \t\n"; int currlev = -999; int linecount = 0; int groupkey = 0; int i,j; int pri = 0; HypNodeArray parents; while (! flat.eof()) { // parse line linecount++; getline(flat, line); if (line.length() <= 1) continue; // skip leading whitespace linepos = 0; linepos = line.find_first_not_of(" \t\n",linepos); // get the level token = line.substr(linepos,line.find(' ',linepos) - linepos); linepos += token.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); level = atoi(token.c_str()); // get the id if (line.find(' ',linepos) != line.npos) id = line.substr(linepos,line.find(' ',linepos) - linepos); else id = line.substr(linepos,line.length() - linepos); linepos += id.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); if (level < -98) { if (id == "position") { for ( i = 0; i < 4; i++) { for ( j = 0; j < 4; j++) { token = line.substr(linepos,line.find(' ',linepos) - linepos); initPos.T[i][j] = atof(token.c_str()); linepos += token.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); } } continue; } else { continue; // hack: -99 for level means comment. } } // get the priority if (hd->spanPolicy & HV_SPANNUM) { token = line.substr(linepos,line.find(' ',linepos) - linepos); pri = atoi(token.c_str()); linepos += token.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); } // enable file value is thrown away since it's obsolete token = line.substr(linepos,line.find(' ',linepos) - linepos); linepos += token.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); // get the group(s) groups.erase(groups.begin(),groups.end()); groupkey = 0; while (linepos < line.length() -1) { string g = line.substr(linepos,line.find(' ',linepos) - linepos); linepos += g.length() + 1; linepos = line.find_first_not_of(" \t\n",linepos); groups.push_back(g); groupkey++; } if (level > currlev+1) { if (currlev < -98) { currlev = level; } else { if (current) { parents.insert(parents.begin(),current); current = descend; // down currlev++; } } } else { if (level <= currlev) { while (currlev >= level) { if (parents.size() > 0) { current = parents[0]; parents.erase(parents.begin()); } currlev--; } } // else stay at the same level } HypNode *newnode = doAddNode(current, id, level, pri); if (newnode) { for ( i = 0; i < groupkey && i < groups.size(); i++) { newnode->setGroup(i, groups[i]); } descend = newnode; if (!current) { current = newnode; hd->centerindex = 0; } } else { int exists = findUrl(id); HypNode *oldnode = nodes[exists]; descend = oldnode; } } int linkparentindex, linkchildindex; for (i = 0; i < links.size(); i++) { // fprintf(stderr, "link %s\n", (char*)links[i]->getId().c_str()); HypLink *link = links[i]; string par = link->getParentId(); linkparentindex = findUrl(par); if (linkparentindex >= 0) link->setParent(nodes[linkparentindex]); string child = link->getChildId(); linkchildindex = findUrl(child); link->setChild(nodes[linkchildindex]); } int disabled = 0; for (i = 0; !disabled && i < HV_MAXGROUPS; i++) if (disabledGroup[i].size() > 0) disabled = 1; for (i = 0; disabled && i < nodes.size(); i++) markEnable(nodes[i]); return; }
//---------------------------------------------------------------------------- // int HypGraph::getNodeEnabled(string URL) //............................................................................ // //---------------------------------------------------------------------------- int HypGraph::getNodeEnabled(string URL) { int i; if ((i = findUrl(URL)) >= 0) return nodes[i]->getEnabled(); return 0; }
//---------------------------------------------------------------------------- // HypNode *HypGraph::doAddNode(HypNode *current, string id, // int level, int pri) //............................................................................ // //---------------------------------------------------------------------------- HypNode *HypGraph::doAddNode(HypNode *current, string id, int level, int pri) { string linkid; int swap = 0; int exists = findUrl(id); if (current && exists >= 0) { // possibly choose new main parent HypNode *oldnode = nodes[exists]; if (!maybeAddChild(current, id)) return (HypNode *)0; HypNode *oldpar = oldnode->getParent(); swap = maybeSwap(current, oldpar, id, pri); if (1 == swap) { /* switch: found better main parent */ linkid = current->getId() + "|" + id; // parent|child HypLink *oldlink = oldnode->getParentLink(); // fprintf(stderr, "swap in %s, swap out %s\n", (char*)linkid.c_str(), (char*)oldlink->getId().c_str()); oldpar->addOutgoing(oldlink); oldpar->deleteChildLink(oldlink); oldpar->deleteChild(oldnode); HypLink *newlink = new HypLink(current->getId(), id); newLink(newlink, linkid); newlink->setParent(current); newlink->setChild(oldnode); newlink->setEnabled(1); newlink->setDesired(1); oldlink->setEnabled(0); oldlink->setDesired(0); newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], hd->colorLinkFrom[2], hd->colorLinkFrom[3]); newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], hd->colorLinkTo[2], hd->colorLinkTo[3]); current->addChildLink(newlink); current->addChild(oldnode); oldnode->addParentLink(newlink); oldnode->addParent(current); oldnode->setLevel(current->getLevel()+1); oldnode->addIncoming(oldlink); } else { // outgoing nontree link if (!maybeAddOutgoing(current, id)) return (HypNode *)0; /* mainparent and child nodes might not exist yet, add later */ linkid = current->getId() + "|" + id; // parent|child HypLink *newlink = new HypLink(current->getId(), id); newLink(newlink, linkid); newlink->setParent(current); newlink->setChild(oldnode); newlink->setEnabled(0); newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], hd->colorLinkFrom[2], hd->colorLinkFrom[3]); newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], hd->colorLinkTo[2], hd->colorLinkTo[3]); // newlink->setEnabled(1); current->addOutgoing(newlink); oldnode->addIncoming(newlink); } return (HypNode *)0; } else { // child node // int thelev = current ? current->getLevel()+1 : level; // HypNode *newnode = new HypNode(hd, current, thelev); HypNode *newnode = new HypNode(hd, current, level); newNode(newnode, id); newnode->setEnabled(1); if (current) { linkid = current->getId() + "|" + id; // parent|child HypLink *newlink = new HypLink(current->getId(), id); newLink(newlink, linkid); newlink->setParent(current); newlink->setChild(newnode); newlink->setEnabled(1); newlink->setDesired(1); newlink->setColorFrom(hd->colorLinkFrom[0], hd->colorLinkFrom[1], hd->colorLinkFrom[2], hd->colorLinkFrom[3]); newlink->setColorTo(hd->colorLinkTo[0], hd->colorLinkTo[1], hd->colorLinkTo[2], hd->colorLinkTo[3]); current->addChildLink(newlink); current->addChild(newnode); newnode->addParentLink(newlink); newnode->addParent(current); } return newnode; } }