function word_table_values($w, $ignore = NULL) { if (!$w->read_paths()) { return [NULL, NULL, NULL, NULL, NULL]; } $lang = $w->lang(); $spart = $w->speechpart(); $values4 = $values3 = $values2 = $values1 = NULL; $values0 = false; // values0 : table name // values1 : major vertical // values2 : minor vertical // values3 : major horizontal // values4 : minor horizontal if ($lang === "la" or $lang === "grc") { if ($spart === "noun" or $spart === "adjective" or $spart === "pronoun") { if ($spart === "adjective") { $values1 = $w->path()->iterate("degree"); } else { $values1 = []; } $values2 = $w->path()->iterate("case"); $values3 = $w->path()->iterate("number"); $values4 = $w->path()->iterate("gender"); } elseif ($spart === "verb") { $values0 = $moods = $w->path()->iterate("mood"); $values1 = []; $values2 = []; $values3 = []; $values4 = []; $hspan4 = []; $persons = PATH($w, "indicative")->iterate("person"); $persons = _filter_ignore($persons, $ignore, PATH($w, "indicative")); foreach ($persons as $_) { $hspan4[] = FALSE; } $hacked = NULL; foreach ($moods as $_0) { if ($ignore !== NULL and in_array($_0, $ignore)) { continue; } $vals4 = $vals3 = $vals2 = $vals1 = NULL; $path = PATH($w, $_0); if ($_0 === "indicative" or $_0 === "subjunctive" or $_0 === "imperative") { $vals1 = $path->iterate("voice"); $vals2 = $path->iterate("tense"); $vals3 = $path->iterate("number"); $vals4 = PATH($w, "indicative")->iterate("person"); if (!$values1) { $values1 = [FALSE]; } } else { if ($_0 === "participle") { $vals1 = [""]; $vals2 = $path->iterate("tense"); $vals3 = $path->iterate("voice"); $vals4 = $hspan4; } else { if ($_0 === "infinitive") { $vals1 = [""]; $vals2 = $path->iterate("tense"); $vals3 = $path->iterate("voice"); $vals4 = $hspan4; } else { if ($_0 === "supine" or $_0 === "gerund") { if ($hacked !== NULL) { foreach ($values0 as $i => $v) { if ($v !== $_0) { continue; } unset($values0[$i]); break; } $values3[$hacked][] = $_0; continue; } $hacked = ""; foreach ($values0 as $i => $v) { if ($v !== $_0) { continue; } $values0[$i] = $hacked; break; } $vals1 = [""]; $vals2 = PATH($w, "gerund")->iterate("case"); if (!$vals2) { $vals2 = PATH($w, "supine")->iterate("case"); } $vals3 = [$_0]; $vals4 = $hspan4; $_0 = $hacked; } } } } $values1[$_0] = $vals1; $values2[$_0] = $vals2; $values3[$_0] = $vals3; $values4[$_0] = $vals4; } } elseif ($spart === "adverb") { $values0 = []; $values1 = $w->path()->iterate("degree"); } } else { if ($lang === "fr") { if ($spart === "noun" or $spart === "adjective" or $spart === "pronoun") { if ($spart === "adjective") { $values1 = $w->path()->iterate("degree"); } else { $values1 = []; } $values3 = $w->path()->iterate("number"); $values4 = $w->path()->iterate("gender"); } elseif ($spart === "verb") { $values0 = $moods = $w->path()->iterate("mood"); $values1 = []; $values2 = []; $values3 = []; $values4 = []; foreach ($moods as $_0) { if ($ignore !== NULL and in_array($_0, $ignore)) { continue; } $vals4 = $vals3 = $vals2 = $vals1 = NULL; $path = PATH($w, $_0); if ($_0 === "indicative" or $_0 === "subjunctive") { if (!$vals1) { $vals1 = [FALSE]; } $vals2 = $path->iterate("tense"); $vals3 = $path->iterate("number"); $vals4 = $path->iterate("person"); } else { if ($_0 === "infinitive" or $_0 === "gerund") { $vals1 = [""]; $vals2 = [""]; $vals3 = $path->iterate("type"); $vals4 = [FALSE, FALSE, FALSE]; } else { if ($_0 === "imperative") { $vals1 = [""]; $vals2 = [""]; $vals3 = $path->iterate("number"); $vals4 = $path->iterate("person"); } else { if ($_0 === "participle") { $vals1 = [""]; $vals2 = $path->iterate("gender"); $vals3 = $path->iterate("tense"); $vals4 = $path->iterate("number"); } } } } /**/ $values1[$_0] = $vals1; $values2[$_0] = $vals2; $values3[$_0] = $vals3; $values4[$_0] = $vals4; } } elseif ($spart === "adverb") { $values1 = $w->path()->iterate("degree"); } } else { if ($lang === "es") { if ($spart === "noun" or $spart === "adjective" or $spart === "pronoun") { if ($spart === "adjective") { $values1 = $w->path()->iterate("degree"); } else { $values1 = []; } $values3 = $w->path()->iterate("number"); $values4 = $w->path()->iterate("gender"); } elseif ($spart === "verb") { $moods = $w->path()->iterate("mood"); $values0 = []; foreach ($moods as $_0) { if ($ignore !== NULL and in_array($_0, $ignore)) { continue; } $path = PATH($w, $_0); if ($_0 === "indicative" or $_0 === "subjunctive") { if (!$values1) { $values1 = [FALSE]; } $values2 = $path->iterate("tense"); $values3 = $path->iterate("number"); $values4 = $path->iterate("person"); } else { if ($_0 === "infinitive" or $_0 === "gerund") { $values1 = [""]; $values2 = [""]; $values3 = [""]; $values4 = [FALSE, FALSE, FALSE]; } else { if ($_0 === "imperative") { $values1 = [""]; $values2 = $path->iterate("imperative-mood"); $values3 = $path->iterate("number"); $values4 = $path->iterate("person"); } else { if ($_0 === "past-participle") { $values1 = [""]; $values2 = $path->iterate("gender"); $values3 = $path->iterate("number"); $values4 = [false, false, false]; } } } } $values0[$_0] = [$values1, $values2, $values3, $values4]; } } elseif ($spart === "adverb") { $values1 = $w->path()->iterate("degree"); } } else { if ($lang === "eo") { if ($spart === "noun" or $spart === "adjective" or $spart === "pronoun") { $values1 = []; $values2 = $w->path()->iterate("case"); $values3 = $w->path()->iterate("number"); $values4 = []; } elseif ($spart === "verb") { $moods = $w->path()->iterate("mood"); $values0 = []; $hacked = NULL; foreach ($moods as $_0) { if ($ignore !== NULL and in_array($_0, $ignore)) { continue; } $path = PATH($w, $_0); $name = NULL; if ($_0 === "indicative") { $values1 = [""]; $values2 = [""]; $values3 = $path->iterate("tense"); $values4 = [FALSE, FALSE]; } else { if ($_0 === "infinitive" or $_0 === "conditional" or $_0 === "imperative") { if ($hacked) { $values0[$hacked][2][] = $_0; continue; } $hacked = $_0; $name = ""; $values1 = [""]; $values2 = [""]; $values3 = [$_0]; $values4 = [FALSE, FALSE]; } else { if ($_0 === "adjectival-participle") { $values1 = $path->iterate("voice"); $values2 = $path->iterate("case"); $values3 = $path->iterate("tense"); $values4 = $path->iterate("number"); } else { if ($_0 === "nominal-participle") { $values1 = $path->iterate("voice"); $values2 = $path->iterate("case"); $values3 = $path->iterate("tense"); $values4 = $path->iterate("number"); } else { if ($_0 === "adverbial-participle") { $values1 = $path->iterate("voice"); $values2 = [""]; $values3 = $path->iterate("tense"); $values4 = [FALSE, FALSE]; } } } } } $values0[$_0] = [$values1, $values2, $values3, $values4]; if ($name !== NULL) { $values0[$_0][] = $name; } } } } else { if ($lang === "ith" && $spart === "root") { $values0 = $w->path()->iterate("complement"); $values3 = $w->path()->iterate("formality"); $values2 = $w->path()->iterate("stem"); } } } } } // values0 : table name // values1 : major vertical // values2 : minor vertical // values3 : major horizontal // values4 : minor horizontal // #1,2,3,4 may depend on #0 (already done) // #2 may depend on #1 // #4 may depend on #3 $values0 = _do_ignore($values0, $ignore); if ($values0 === false) { $values0 = [false]; } if (is_vec($values1)) { $values1 = _fill($values1, $values0); } if (is_vec($values2)) { $values2 = _fill($values2, $values0); } if (is_vec($values3)) { $values3 = _fill($values3, $values0); } if (is_vec($values4)) { $values4 = _fill($values4, $values0); } _filter_ignore2($values1, $ignore, PATH($w), $values0); _filter_ignore2($values2, $ignore, PATH($w), $values0, $values1); _filter_ignore2($values3, $ignore, PATH($w), $values0); _filter_ignore2($values4, $ignore, PATH($w), $values0, $values3); /*var_dump($values0); var_dump($values1); var_dump($values2); var_dump($values3); var_dump($values4);*/ return [$values0, $values1, $values2, $values3, $values4]; }
function make_chart2($w, $w2, $values = NULL, $ignore = NULL, $legend = "this chart", $add = NULL, $basepath = NULL) { ob_start(); if ($values === NULL) { $values = word_table_values($w, $ignore); list($values0, $values1, $values2, $values3, $values4) = $values; } else { list($values0, $values1, $values2, $values3, $values4) = $values; $values0 = _do_ignore($values0, $ignore); if (is_fillable($values1)) { $values1 = _fill($values1, $values0); } if (is_fillable($values2)) { $values2 = _fill($values2, $values0); } if (is_fillable($values3)) { $values3 = _fill($values3, $values0); } if (is_fillable($values4)) { $values4 = _fill($values4, $values0); } _filter_ignore2($values1, $ignore, PATH($w), $values0); _filter_ignore2($values2, $ignore, PATH($w), $values0, $values1); _filter_ignore2($values3, $ignore, PATH($w), $values0); _filter_ignore2($values4, $ignore, PATH($w), $values0, $values3); } global $OP_USER_INPUT; $w->read_paths(); $w->read_attrs(); $w2->read_paths(); $w2->read_attrs(); if ($add) { $add = ", {$add}"; } $ret = ["help" => "Fill in {$legend} for “" . display_word_name($w) . "” and “" . display_word_name($w2) . "”{$add}.", "selections" => [], "sentence" => []]; $i = 0; $get_question = function ($form, $path) use(&$i, $w2, &$ret, $basepath) { $ret["answer{$i}-hidden"] = TRUE; $ret["answer{$i}"] = ["correct" => [], "acceptable" => []]; $form2 = PATH($w2, $path, $basepath); $form2 = $form2->get(); foreach (explode("\n", $form) as $f) { foreach (explode("\n", $form2) as $f2) { $ret["answer{$i}"]["correct"][] = $f . " " . $f2; $ret["answer{$i}"]["acceptable"][] = $f . " " . $f2; $ret["answer{$i}"]["acceptable"][] = $f2 . " " . $f; } } $ret["answer{$i}-tooltip"] = "Enter form"; $i++; return '<input>'; }; do_table($w, $values0, $values1, $values2, $values3, $values4, $ignore, "format_value", $get_question, NULL, NULL, 0); $table = explode("<input>", ob_get_contents()); ob_clean(); $i = count($table) - 1; foreach ($table as $r) { $ret["sentence"][] = HTML($r); if ($i) { $ret["sentence"][] = $OP_USER_INPUT; } $i -= 1; } return $ret; }