###############################################

# FILE: funcs

# SUBJ: comment

# AUTH: David de Hilster

# CREATED: 2024-10-7 15:41:41

# MODIFIED:

###############################################



@DECL



PersonAttributes(L("person pn"),L("attr pn")) {

  L("conj") = pnvar(L("person pn"),"conjoined");

  if (L("conj")) {

    "copyperson.txt" << "Conjoined: " << pnvar(L("person pn"),"$text") << "\n";

    L("node") = pndown(L("person pn"));

    while (L("node")) {

      PersonAttribute(L("node"),L("attr pn"));

      L("node") = pnnext(L("node"));

    }

  } else {

    "copyperson.txt" << "== " << pnvar(L("person pn"),"$text") << "\n";

    PersonAttribute(L("person pn"),L("attr pn"));

  }

}



PersonAttribute(L("person pn"),L("attr pn")) {

  L("con") = pnvar(L("person pn"),"con");

  if (!L("con")) {

    return;

  }

  L("full") = conval(L("con"),"full");

  if (L("full")) {

    "copyperson.txt" << " Has full: " << conceptname(L("full")) << "\n";

    L("con") = L("full");

  }

  L("person") = conval(L("con"),"person");

  if (!L("person")) {

    "copyperson.txt" << " No person found\n";

    return;

  } 

  "copyperson.txt" << conceptpath(L("person")) << "\n";



  L("pn") = L("attr pn");

  while (L("pn")) {

    L("name") = pnname(L("pn"));

    if (L("name") == "_person") {

      return;

    } 

    if (L("name") == "_attribute") {

      L("attr") = MakeCountCon(L("person"),"attr");

      "copyperson.txt" << " " << L("name") << ": " << pnvar(L("pn"),"$text") << "\n";

      PNCopyAttrsToCon(L("pn"),L("attr"));

    }

    L("pn") = pnnext(L("pn"));

  }

}



AddPersonToKB(L("cap"),L("first name"),L("last name")) {

  L("full name") = L("first name") + " " + L("last name");

  "addperson.txt" << "Adding: " << L("full name") << "\n";

  L("person con") = getconcept(G("people"),L("full name"));

  addstrval(L("person con"),"first",L("first name"));

  addstrval(L("person con"),"last",L("last name"));

  L("cap con") = pnvar(L("cap"),"con");

  L("sent con") = conval(L("cap con"),"sent");

  L("con") = MakeCountCon(L("sent con"),"person");

  addconval(L("con"),"con",L("person con"));

  addconval(L("cap con"),"person",L("person con"));

  return 1;

}



AddPersonOne(L("cap"),L("name node")) {

  L("con") = pnvar(L("cap"),"con");

  L("full") = conval(L("con"),"full");

  if (L("full")) {

    L("sent con") = conval(L("con"),"sent");

    L("con") = MakeCountCon(L("sent con"),"person");

    addconval(L("con"),"con",L("full"));

    return 1;

  }

  return 0;

}



AddPersonTwo(L("cap"),L("first name node"),L("last name node")) {

  L("first name") = pnvar(L("first name node"),"$text");

  L("last name") = pnvar(L("last name node"),"$text");

  return AddPersonToKB(L("cap"),L("first name"),L("last name"));

}



AddPersonThree(L("cap"),L("first name node"),L("last piece node"),L("last name node")) {

  L("first name") = pnvar(L("first name node"),"$text");

  L("last name") = pnvar(L("last piece node"),"$text") + " " + pnvar(L("last name node"),"$text");

  return AddPersonToKB(L("cap"),L("first name"),L("last name"));

}



MarkConjunctions(L("conj node")) {

  L("first node") = pnprev(L("conj node"));

  L("last node") = L("first node");

  L("first name") = pnname(L("first node"));

  "conjoin.txt" << "=========\nFirst: " << L("first name") << "\n";

  "conjoin.txt" << "conj: " << pnname(L("conj node")) << "\n";

  L("node") = pnnext(L("conj node"));

  L("last conj") = L("conj node");

  L("found") = 0;



  while (L("node") && !L("done")) {

    L("name") = pnname(L("node"));

    "conjoin.txt" << "node: " << L("name") << "\n";

    if (L("name") == L("first name")) {

      pnmakevar(L("node"),"conjoin",1);

      pnmakevar(L("last node"),"conjoin",1);

      pnmakevar(L("last conj"),"conjoin",1);

      L("found") = 1;

    } else if (pnvar(L("node"),"conjunction")) {

      L("last conj") = L("node");

    } else {

      L("done") = 1;

    }

    L("last node") = L("node");

    L("node") = pnnext(L("node"));

  }



  if (L("found")) {

    "conjoin.txt" << "CONJUNCTION FOUND!\n";

    pnmakevar(L("last conj"),"conjoin",1);

  }

}



@@DECL