if ($reverse = substr($attr, 0, 1) === "!") { $attr = substr($attr, 1); } if (strpos($attr, "=") === FALSE) { $a = ATTR($attr); } else { list($name, $value) = explode("=", $attr, 2); $a = ATTR($name, $value); } if ($a !== NULL) { if (!$reverse) { $searcher = $searcher->only_with_attr($a); } else { $searcher = $searcher->only_without_attr($a); } } } $list = $searcher->all(); } else { $list = []; foreach ($ids as $id) { $list[] = WORD(defaultDB(), intval($id)); } } $res = vec_norm(array_map(function ($e) { if (no_format($e)) { return ["data" => $e->name(), "value" => $e->id() . "", "display" => $e->info()]; } return ["data" => $e->name(), "value" => $e->id() . "", "display" => format_word($e->info())]; }, $list)); echo json_encode($res);
function display_word_name($w, &$common = false) { $lang = $w->lang(); $spart = $w->speechpart(); $name = NULL; if ($lang === "la") { if ($spart === "noun") { if ($genders = $w->path()->iterate("gender")) { $name = []; $common = true; if ($name !== NULL and in_array($g = "masculine", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); $key = PATH($w, "genitive/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } } else { $common = false; } if ($name !== NULL and in_array($g = "feminine", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); $key = PATH($w, "genitive/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } } else { $common = false; } if ($name !== NULL and in_array($g = "neuter", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); $key = PATH($w, "genitive/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } $common = false; } if ($common and count($name) === 4 and $name[0] == $name[2] and $name[1] == $name[3]) { $name = [$name[0], $name[1]]; } else { $common = false; } } } elseif ($spart === "pronoun") { if ($genders = $w->path()->iterate("gender")) { $name = []; if ($name !== NULL and in_array($g = "masculine", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } if ($name !== NULL and in_array($g = "feminine", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } if ($name !== NULL and in_array($g = "neuter", $genders)) { $key = PATH($w, "nominative/singular/{$g}"); if (!$key->hasvalue()) { $name = NULL; } else { $name[] = $key->get(); } } if (count($name) == 2 and $name[0] === $name[1] or count($name) == 3 and $name[0] === $name[1] and $name[1] === $name[2]) { $name = [$name[0]]; $key = PATH($w, "nominative/plural"); if ($key->hasvalue()) { $name[] = $key->get(); } } } } elseif ($spart === "adjective") { $name = []; $number = safe_get(0, PATH($w, "positive")->iterate("number")); $keys = ["" => ["positive/nominative/{$number}/masculine", "positive/nominative/{$number}/feminine", "positive/nominative/{$number}/neuter"], "adjective-12" => ["positive/nominative/{$number}/masculine", "positive/nominative/{$number}/feminine", "positive/nominative/{$number}/neuter"], "adjective-3" => ["positive/nominative/{$number}/masculine", "positive/nominative/{$number}/neuter", "positive/genitive/{$number}/masculine"], "adjective-3-3" => ["positive/nominative/{$number}/masculine", "positive/nominative/{$number}/feminine", "positive/nominative/{$number}/neuter"]]; $keys = $keys[ATTR($w, "declension")->get()]; foreach ($keys as $_ => $key) { $key = PATH($w, $key); if (!$key->hasvalue()) { $name = NULL; break; } $name[] = $key->get(); } } elseif ($spart === "verb") { $name = []; foreach (["indicative/active/present/person-1/singular", "infinitive/active/present", "indicative/active/perfect/person-1/singular", "participle/perfect/passive"] as $_ => $key) { $key = PATH($w, $key); if (!$key->hasvalue()) { if ($_ <= 1) { $name = NULL; break; } elseif ($_ == 3) { $key = PATH($w, "supine/accusative"); if (!$key->hasvalue()) { continue; } } else { continue; } } $name[] = $key->get(); } } } if ($name === NULL) { $name = $w->name(); } else { $name = implode(", ", array_map("modify_options", $name)); } if (no_format($w)) { $name = $w->name(); } else { $name = format_word($name, $w->lang()); } return $name; }