summaryrefslogtreecommitdiff
path: root/packages/prosody-ui/src/LangText.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/prosody-ui/src/LangText.tsx')
-rw-r--r--packages/prosody-ui/src/LangText.tsx78
1 files changed, 78 insertions, 0 deletions
diff --git a/packages/prosody-ui/src/LangText.tsx b/packages/prosody-ui/src/LangText.tsx
new file mode 100644
index 0000000..790c499
--- /dev/null
+++ b/packages/prosody-ui/src/LangText.tsx
@@ -0,0 +1,78 @@
+import { franc } from "franc-all";
+import React, { useEffect, useState } from "react";
+import ThaiText from "./thai/ThaiText";
+import { ColoredText } from "./components/Sentence";
+import type { AnalyzeRes, WordData } from "./logic/types";
+import { detectScript, scriptFromLang } from "./logic/utils";
+import LatinText from "./latin/LatinText";
+import { buildWiktionaryURL, parseWiktionary } from "./logic/wiki";
+import type { Result } from "sortug";
+
+export default function LangText({
+ text,
+ lang,
+ theme,
+ fetchWiki,
+ handleWord,
+}: {
+ text: string;
+ lang?: string;
+ theme?: string;
+ fetchWiki?: (url: string) => Promise<string>;
+ handleWord?: (wd: Result<WordData>) => any;
+}) {
+ const [llang, setLang] = useState("");
+ const [script, setScript] = useState(scriptFromLang(lang || "", text));
+ useEffect(() => {
+ if (!lang) {
+ const res = franc(text);
+ setLang(res);
+ } else setLang(lang);
+ }, [text]);
+ console.log("langtext", { text, llang, script });
+
+ async function openWord(word: string) {
+ // console.log("looking up", word);
+ // const url = buildWiktionaryURL(word);
+ // const html = await fetchWiki(url);
+ // const parsed = parseWiktionary(html, url);
+ // console.log({ parsed });
+ // if ("error" in parsed) handleWord(parsed);
+ // else {
+ // const wd: WordData = {
+ // spelling: word,
+ // lang: llang,
+ // ipa: parsed.ok.ipa[0],
+ // meanings: parsed.ok.meanings,
+ // references: { url: parsed.ok.url },
+ // };
+ // handleWord({ ok: wd });
+ // }
+ // // const d = data[s];
+ // // setModal(d);
+ // // setModal(<WordModal data={d} lang={lang} />);
+ }
+
+ return (
+ <div className="lang-text-container">
+ {script === "Thai" ? (
+ <ThaiText text={text} openWord={openWord} />
+ ) : script === "Latin" ? (
+ <LatinText text={text} lang={llang} openWord={openWord} />
+ ) : (
+ <Generic text={text} lang={llang} />
+ )}
+ </div>
+ );
+}
+function Generic({ text, lang }: { text: string; lang: string }) {
+ const [data, setData] = useState<AnalyzeRes>();
+ useEffect(() => {
+ // segmentate(text, lang)
+ }, [text, lang]);
+ console.log({ lang }, "generic");
+ // <p className="lang-lang">{lang}</p>
+ // <p className="lang-text">{text}</p>
+ // {data && <ColoredText frags={Object.keys(data)} />}
+ return <div className="lang-text-div"></div>;
+}