Преглед на файлове

:sparkles: 巴利脚本切换

visuddhinanda преди 3 години
родител
ревизия
92856016a0

+ 2 - 0
dashboard/src/components/auth/setting/SettingArticle.tsx

@@ -9,6 +9,8 @@ const Widget = () => {
       <SettingItem data={SettingFind("setting.display.original")} />
       <SettingItem data={SettingFind("setting.display.original")} />
       <SettingItem data={SettingFind("setting.layout.direction")} />
       <SettingItem data={SettingFind("setting.layout.direction")} />
       <SettingItem data={SettingFind("setting.layout.paragraph")} />
       <SettingItem data={SettingFind("setting.layout.paragraph")} />
+      <SettingItem data={SettingFind("setting.pali.script1")} />
+      <SettingItem data={SettingFind("setting.pali.script2")} />
     </div>
     </div>
   );
   );
 };
 };

+ 25 - 2
dashboard/src/components/auth/setting/SettingItem.tsx

@@ -1,4 +1,4 @@
-import { Switch, Typography, Radio, RadioChangeEvent } from "antd";
+import { Switch, Typography, Radio, RadioChangeEvent, Select } from "antd";
 import {
 import {
   onChange as onSettingChanged,
   onChange as onSettingChanged,
   settingInfo,
   settingInfo,
@@ -58,7 +58,7 @@ const Widget = ({ data, onChange }: IWidgetSettingItem) => {
                   >
                   >
                     {data.options.map((item, id) => {
                     {data.options.map((item, id) => {
                       return (
                       return (
-                        <Radio.Button key={item.key} value={item.key}>
+                        <Radio.Button key={id} value={item.value}>
                           {item.label}
                           {item.label}
                         </Radio.Button>
                         </Radio.Button>
                       );
                       );
@@ -68,6 +68,29 @@ const Widget = ({ data, onChange }: IWidgetSettingItem) => {
               );
               );
             }
             }
 
 
+            break;
+          default:
+            if (typeof data.options !== "undefined") {
+              content = (
+                <div>
+                  <Select
+                    defaultValue={data.defaultValue}
+                    style={{ width: 120 }}
+                    onChange={(value: string) => {
+                      console.log(`selected ${value}`);
+                      store.dispatch(
+                        onSettingChanged({
+                          key: data.key,
+                          value: value,
+                        })
+                      );
+                    }}
+                    options={data.options}
+                  />
+                </div>
+              );
+            } else {
+            }
             break;
             break;
         }
         }
         break;
         break;

+ 44 - 14
dashboard/src/components/auth/setting/default.ts

@@ -1,8 +1,9 @@
 import { useIntl } from "react-intl";
 import { useIntl } from "react-intl";
+import { ISettingItem } from "../../../reducers/setting";
 
 
 export interface ISettingItemOption {
 export interface ISettingItemOption {
   label: string;
   label: string;
-  key: string;
+  value: string;
 }
 }
 export interface ISetting {
 export interface ISetting {
   key: string;
   key: string;
@@ -16,6 +17,23 @@ export interface ISetting {
   min?: number;
   min?: number;
 }
 }
 
 
+export const GetUserSetting = (
+  key: string,
+  curr?: ISettingItem[]
+): string | number | boolean | undefined => {
+  const currSetting = curr?.find((element) => element.key === key);
+  if (typeof currSetting !== "undefined") {
+    return currSetting.value;
+  } else {
+    const defaultSetting = SettingFind(key);
+    if (typeof defaultSetting !== "undefined") {
+      return defaultSetting.defaultValue;
+    } else {
+      return undefined;
+    }
+  }
+};
+
 export const SettingFind = (key: string): ISetting | undefined => {
 export const SettingFind = (key: string): ISetting | undefined => {
   return Settings().find((element) => element.key === key);
   return Settings().find((element) => element.key === key);
 };
 };
@@ -46,13 +64,13 @@ export const Settings = (): ISetting[] => {
       defaultValue: "column",
       defaultValue: "column",
       options: [
       options: [
         {
         {
-          key: "column",
+          value: "column",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.layout.direction.col.label",
             id: "setting.layout.direction.col.label",
           }),
           }),
         },
         },
         {
         {
-          key: "row",
+          value: "row",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.layout.direction.row.label",
             id: "setting.layout.direction.row.label",
           }),
           }),
@@ -72,13 +90,13 @@ export const Settings = (): ISetting[] => {
       defaultValue: "sentence",
       defaultValue: "sentence",
       options: [
       options: [
         {
         {
-          key: "sentence",
+          value: "sentence",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.layout.paragraph.sentence.label",
             id: "setting.layout.paragraph.sentence.label",
           }),
           }),
         },
         },
         {
         {
-          key: "paragraph",
+          value: "paragraph",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.layout.paragraph.paragraph.label",
             id: "setting.layout.paragraph.paragraph.label",
           }),
           }),
@@ -95,31 +113,43 @@ export const Settings = (): ISetting[] => {
       description: intl.formatMessage({
       description: intl.formatMessage({
         id: "setting.pali.script1.description",
         id: "setting.pali.script1.description",
       }),
       }),
-      defaultValue: "rome",
+      defaultValue: "roman",
       options: [
       options: [
         {
         {
-          key: "rome",
+          value: "roman",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.rome.label",
             id: "setting.pali.script.rome.label",
           }),
           }),
         },
         },
         {
         {
-          key: "my",
+          value: "roman_to_my",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.my.label",
             id: "setting.pali.script.my.label",
           }),
           }),
         },
         },
         {
         {
-          key: "si",
+          value: "roman_to_si",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.si.label",
             id: "setting.pali.script.si.label",
           }),
           }),
         },
         },
+        {
+          value: "roman_to_thai",
+          label: intl.formatMessage({
+            id: "setting.pali.script.thai.label",
+          }),
+        },
+        {
+          value: "roman_to_taitham",
+          label: intl.formatMessage({
+            id: "setting.pali.script.tai.label",
+          }),
+        },
       ],
       ],
     },
     },
     {
     {
       /**
       /**
-       * 第一巴利脚本
+       * 第巴利脚本
        */
        */
       key: "setting.pali.script2",
       key: "setting.pali.script2",
       label: intl.formatMessage({ id: "setting.pali.script2.label" }),
       label: intl.formatMessage({ id: "setting.pali.script2.label" }),
@@ -129,25 +159,25 @@ export const Settings = (): ISetting[] => {
       defaultValue: "none",
       defaultValue: "none",
       options: [
       options: [
         {
         {
-          key: "none",
+          value: "none",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.none.label",
             id: "setting.pali.script.none.label",
           }),
           }),
         },
         },
         {
         {
-          key: "rome",
+          value: "roman",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.rome.label",
             id: "setting.pali.script.rome.label",
           }),
           }),
         },
         },
         {
         {
-          key: "my",
+          value: "roman_to_my",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.my.label",
             id: "setting.pali.script.my.label",
           }),
           }),
         },
         },
         {
         {
-          key: "si",
+          value: "roman_to_si",
           label: intl.formatMessage({
           label: intl.formatMessage({
             id: "setting.pali.script.si.label",
             id: "setting.pali.script.si.label",
           }),
           }),

+ 384 - 0
dashboard/src/components/code/my.ts

@@ -0,0 +1,384 @@
+const char_roman_to_myn = [
+  { id: "ggho", value: "ဂ္ဃေါ" },
+  { id: "gghā", value: "ဂ္ဃါ" },
+
+  { id: "ddho", value: "ဒ္ဓေါ" },
+  { id: "ddhā", value: "ဒ္ဓါ" },
+
+  { id: "ndho", value: "န္ဓော" }, //
+  { id: "ndo", value: "န္ဒော" }, //
+  { id: "ndā", value: "န္ဒာ" }, //
+  { id: "ndhā", value: "န္ဓာ" }, //
+
+  { id: "kho", value: "ခေါ" }, //
+  { id: "khā", value: "ခါ" }, //
+  { id: "kkho", value: "က္ခော" }, //
+  { id: "kkhā", value: "က္ခာ" }, //
+  { id: "go", value: "ဂေါ" }, //
+  { id: "ṅo", value: "ငေါ" }, //
+  { id: "dho", value: "ဓေါ" }, //
+  { id: "do", value: "ဒေါ" }, //
+  { id: "po", value: "ပေါ" }, //
+  { id: "vo", value: "ဝေါ" }, //
+  { id: "gā", value: "ဂါ" }, //
+  { id: "ṅā", value: "ငါ" }, //
+  { id: "dā", value: "ဒါ" }, //
+  { id: "dhā", value: "ဓါ" }, //
+  { id: "pā", value: "ပါ" }, //
+  { id: "dvā", value: "ဒွါ" }, //
+  { id: "tvā", value: "တွာ" }, //
+  { id: "vā", value: "ဝါ" }, //
+
+  //{ id: "ppho", value: "ပ္ဖေါ" },
+  //{ id: "pphā", value: "ပ္ဖါ" },
+
+  { id: "ss", value: "ဿ္" },
+
+  { id: "vh", value: "ဝှ္" },
+  { id: "vy", value: "ဝျ္" },
+  { id: "vr", value: "ဝြ္" },
+
+  { id: "yh", value: "ယှ္" },
+  { id: "yy", value: "ယျ္" },
+  { id: "yr", value: "ယြ္" },
+  { id: "yv", value: "ယွ္" },
+
+  { id: "hy", value: "ဟျ္" },
+  { id: "hr", value: "ဟြ္" },
+  { id: "hv", value: "ဟွ္" },
+
+  { id: "rv", value: "ရွ္" },
+  { id: "rh", value: "ရှ္" },
+  { id: "ry", value: "ရျ္" },
+
+  { id: "kh", value: "ခ္" },
+  { id: "gh", value: "ဃ္" },
+  { id: "ch", value: "ဆ္" },
+  { id: "jh", value: "ဈ္" },
+  { id: "ññ", value: "ည္" },
+  { id: "ṭh", value: "ဌ္" },
+  { id: "ḍh", value: "ဎ္" },
+  { id: "th", value: "ထ္" },
+  { id: "dh", value: "ဓ္" },
+  { id: "ph", value: "ဖ္" },
+  { id: "bh", value: "ဘ္" },
+  { id: "k", value: "က္" },
+  { id: "g", value: "ဂ္" },
+  { id: "c", value: "စ္" },
+  { id: "j", value: "ဇ္" },
+  { id: "ñ", value: "ဉ္" },
+  { id: "ḷ", value: "ဠ္" },
+  { id: "ṭ", value: "ဋ္" },
+  { id: "ḍ", value: "ဍ္" },
+  { id: "ṇ", value: "ဏ္" },
+  { id: "t", value: "တ္" },
+  { id: "d", value: "ဒ္" },
+  { id: "n", value: "န္" },
+  { id: "p", value: "ပ္" },
+  { id: "b", value: "ဗ္" },
+  { id: "m", value: "မ္" },
+  { id: "l", value: "လ္" },
+  { id: "s", value: "သ္" },
+  { id: "ṅ", value: "င်္" },
+
+  { id: "္h", value: "ှ္" },
+  { id: "h", value: "ဟ္" },
+  { id: "္y", value: "ျ္" },
+  { id: "y", value: "ယ္" },
+  { id: "္r", value: "ြ္" },
+  { id: "r", value: "ရ္" },
+  { id: "္v", value: "ွ္" },
+  { id: "v", value: "ဝ္" },
+  { id: "္aṃ", value: "ံ" },
+  { id: "္iṃ", value: "ိံ" },
+  { id: "္uṃ", value: "ုံ" },
+  { id: "္ā", value: "ာ" },
+  { id: "္i", value: "ိ" },
+  { id: "္ī", value: "ီ" },
+  { id: "္u", value: "ု" },
+  { id: "္ū", value: "ူ" },
+  { id: "္e", value: "ေ" },
+  { id: "္o", value: "ော" },
+  { id: "aṃ", value: "အံ" },
+  { id: "iṃ", value: "ဣံ" },
+  { id: "uṃ", value: "ဥံ" },
+  { id: "a", value: "အ" },
+  { id: "ā", value: "အာ" },
+  { id: "i", value: "ဣ" },
+  { id: "ī", value: "ဤ" },
+  { id: "u", value: "ဥ" },
+  { id: "ū", value: "ဦ" },
+  { id: "e", value: "ဧ" },
+  { id: "o", value: "ဩ" },
+  { id: "်္အ", value: "" },
+  { id: "္အ", value: "" },
+  { id: "1", value: "၁" }, //新增数字
+  { id: "2", value: "၂" },
+  { id: "3", value: "၃" },
+  { id: "4", value: "၄" },
+  { id: "5", value: "၅" },
+  { id: "6", value: "၆" },
+  { id: "7", value: "၇" },
+  { id: "8", value: "၈" },
+  { id: "9", value: "၉" },
+  { id: "0", value: "၀" },
+  { id: "ခော", value: "ခေါ" }, //矫正缅文转码错误
+  { id: "ခာ", value: "ခါ" }, //kh
+  { id: "က္ခေါ", value: "က္ခော" }, //kkho
+  { id: "က္ခါ", value: "က္ခာ" }, //kkhā
+  { id: "ဂော", value: "ဂေါ" }, //go
+  { id: "ငော", value: "ငေါ" }, //ṅo
+  { id: "ဓော", value: "ဓေါ" }, //dho
+  { id: "ဒော", value: "ဒေါ" }, //do
+  { id: "ပော", value: "ပေါ" }, //po
+  { id: "ဝော", value: "ဝေါ" }, //vo
+  { id: "ဂာ", value: "ဂါ" }, //gā
+  { id: "ငာ", value: "ငါ" }, //ṅā
+  { id: "ဒာ", value: "ဒါ" }, //dā
+  { id: "ဓာ", value: "ဓါ" }, //dhā
+  { id: "ပာ", value: "ပါ" }, //pā
+  { id: "ဝာ", value: "ဝါ" }, //vā
+  { id: "ဒွာ", value: "ဒွါ" }, //dvā
+];
+
+const char_myn_to_roman_1 = [
+  { id: "ႁႏၵ", value: "ndra" }, //後加
+  { id: "ခ္", value: "kh" },
+  { id: "ဃ္", value: "gh" },
+  { id: "ဆ္", value: "ch" },
+  { id: "ဈ္", value: "jh" },
+  { id: "ည္", value: "ññ" },
+  { id: "ဌ္", value: "ṭh" },
+  { id: "ဎ္", value: "ḍh" },
+  { id: "ထ္", value: "th" },
+  { id: "ဓ္", value: "dh" },
+  { id: "ဖ္", value: "ph" },
+  { id: "ဘ္", value: "bh" },
+  { id: "က္", value: "k" },
+  { id: "ဂ္", value: "g" },
+  { id: "စ္", value: "c" },
+  { id: "ဇ္", value: "j" },
+  { id: "ဉ္", value: "ñ" },
+  { id: "ဠ္", value: "ḷ" },
+  { id: "ဋ္", value: "ṭ" },
+  { id: "ဍ္", value: "ḍ" },
+  { id: "ဏ္", value: "ṇ" },
+  { id: "တ္", value: "t" },
+  { id: "ဒ္", value: "d" },
+  { id: "န္", value: "n" },
+  { id: "ဟ္", value: "h" },
+  { id: "ပ္", value: "p" },
+  { id: "ဗ္", value: "b" },
+  { id: "မ္", value: "m" },
+  { id: "ယ္", value: "y" },
+  { id: "ရ္", value: "r" },
+  { id: "လ္", value: "l" },
+  { id: "ဝ္", value: "v" },
+  { id: "သ္", value: "s" },
+  { id: "င္", value: "ṅ" },
+  { id: "င်္", value: "ṅ" },
+  { id: "ဿ", value: "ssa" },
+  { id: "ခ", value: "kha" },
+  { id: "ဃ", value: "gha" },
+  { id: "ဆ", value: "cha" },
+  { id: "ဈ", value: "jha" },
+  { id: "စျ", value: "jha" },
+  { id: "ည", value: "ñña" },
+  { id: "ဌ", value: "ṭha" },
+  { id: "ဎ", value: "ḍha" },
+  { id: "ထ", value: "tha" },
+  { id: "ဓ", value: "dha" },
+  { id: "ဖ", value: "pha" },
+  { id: "ဘ", value: "bha" },
+  { id: "က", value: "ka" },
+  { id: "ဂ", value: "ga" },
+  { id: "စ", value: "ca" },
+  { id: "ဇ", value: "ja" },
+  { id: "ဉ", value: "ña" },
+  { id: "ဠ", value: "ḷa" },
+  { id: "ဋ", value: "ṭa" },
+  { id: "ဍ", value: "ḍa" },
+  { id: "ဏ", value: "ṇa" },
+  { id: "တ", value: "ta" },
+  { id: "ဒ", value: "da" },
+  { id: "န", value: "na" },
+  { id: "ဟ", value: "ha" },
+  { id: "ပ", value: "pa" },
+  { id: "ဗ", value: "ba" },
+  { id: "မ", value: "ma" },
+  { id: "ယ", value: "ya" },
+  { id: "ရ", value: "ra" },
+  { id: "႐", value: "ra" }, //后加
+  { id: "လ", value: "la" },
+  { id: "ဝ", value: "va" },
+  { id: "သ", value: "sa" },
+  { id: "aျ္", value: "ya" },
+  { id: "aွ္", value: "va" },
+  { id: "aြ္", value: "ra" },
+  { id: "aြ", value: "ra" },
+
+  { id: "ၱ", value: "္ta" }, //后加
+  { id: "ၳ", value: "္tha" }, //后加
+  { id: "ၵ", value: "္da" }, //后加
+  { id: "ၶ", value: "္dha" }, //后加
+
+  { id: "ၬ", value: "္ṭa" }, //后加
+  { id: "ၭ", value: "္ṭha" }, //后加
+
+  { id: "ၠ", value: "္ka" }, //后加
+  { id: "ၡ", value: "္kha" }, //后加
+  { id: "ၢ", value: "္ga" }, //后加
+  { id: "ၣ", value: "္gha" }, //后加
+
+  { id: "ၸ", value: "္pa" }, //后加
+  { id: "ၹ", value: "္pha" }, //后加
+  { id: "ၺ", value: "္ba" }, //后加
+  { id: "႓", value: "္bha" }, //后加
+
+  { id: "ၥ", value: "္ca" }, //后加
+  { id: "ၧ", value: "္cha" }, //后加
+  { id: "ၨ", value: "္ja" }, //后加
+  { id: "ၩ", value: "္jha" }, //后加
+
+  { id: "်", value: "္a" }, //后加
+  { id: "ျ", value: "္ya" }, //后加
+  { id: "ႅ", value: "္la" }, //后加
+  { id: "ၼ", value: "္ma" }, //后加
+  { id: "ွ", value: "္va" }, //后加
+  { id: "ႇ", value: "္ha" }, //后加
+  { id: "ႆ", value: "ssa" }, //后加
+  { id: "ၷ", value: "na" }, //后加
+  { id: "ၲ", value: "ta" }, //后加
+
+  { id: "႒", value: "ṭṭha" }, //后加
+  { id: "႗", value: "ṭṭa" }, //后加
+  { id: "ၯ", value: "ḍḍha" }, //后加
+  { id: "ၮ", value: "ḍḍa" }, //后加
+  { id: "႑", value: "ṇḍa" }, //后加
+
+  { id: "kaၤ", value: "ṅka" }, //后加
+  { id: "gaၤ", value: "ṅga" }, //后加
+  { id: "khaၤ", value: "ṅkha" }, //后加
+  { id: "ghaၤ", value: "ṅgha" }, //后加
+
+  { id: "aှ", value: "ha" },
+  { id: "aိံ", value: "iṃ" },
+  { id: "aုံ", value: "uṃ" },
+  { id: "aော", value: "o" },
+  { id: "aေါ", value: "o" },
+  { id: "aအံ", value: "aṃ" },
+  { id: "aဣံ", value: "iṃ" },
+  { id: "aဥံ", value: "uṃ" },
+  { id: "aံ", value: "aṃ" },
+  { id: "aာ", value: "ā" },
+  { id: "aါ", value: "ā" },
+  { id: "aိ", value: "i" },
+  { id: "aီ", value: "ī" },
+  { id: "aု", value: "u" },
+  { id: "aဳ", value: "u" }, //後加
+  { id: "aူ", value: "ū" },
+  { id: "aေ", value: "e" },
+  { id: "အါ", value: "ā" },
+  { id: "အာ", value: "ā" },
+  { id: "အ", value: "a" },
+  { id: "ဣ", value: "i" },
+  { id: "ဤ", value: "ī" },
+  { id: "ဥ", value: "u" },
+  { id: "ဦ", value: "ū" },
+  { id: "ဧ", value: "e" },
+  { id: "ဩ", value: "o" },
+  { id: "ႏ", value: "n" }, //後加
+  { id: "ၪ", value: "ñ" }, //後加
+  { id: "a္", value: "" }, //後加
+  { id: "္", value: "" }, //後加
+  { id: "aံ", value: "aṃ" },
+
+  { id: "ေss", value: "sse" }, //后加
+  { id: "ေkh", value: "khe" }, //后加
+  { id: "ေgh", value: "ghe" }, //后加
+  { id: "ေch", value: "che" }, //后加
+  { id: "ေjh", value: "jhe" }, //后加
+  { id: "ေññ", value: "ññe" }, //后加
+  { id: "ေṭh", value: "ṭhe" }, //后加
+  { id: "ေḍh", value: "ḍhe" }, //后加
+  { id: "ေth", value: "the" }, //后加
+  { id: "ေdh", value: "dhe" }, //后加
+  { id: "ေph", value: "phe" }, //后加
+  { id: "ေbh", value: "bhe" }, //后加
+  { id: "ေk", value: "ke" }, //后加
+  { id: "ေg", value: "ge" }, //后加
+  { id: "ေc", value: "ce" }, //后加
+  { id: "ေj", value: "je" }, //后加
+  { id: "ေñ", value: "ñe" }, //后加
+  { id: "ေḷ", value: "ḷe" }, //后加
+  { id: "ေṭ", value: "ṭe" }, //后加
+  { id: "ေḍ", value: "ḍe" }, //后加
+  { id: "ေṇ", value: "ṇe" }, //后加
+  { id: "ေt", value: "te" }, //后加
+  { id: "ေd", value: "de" }, //后加
+  { id: "ေn", value: "ne" }, //后加
+  { id: "ေh", value: "he" }, //后加
+  { id: "ေp", value: "pe" }, //后加
+  { id: "ေb", value: "be" }, //后加
+  { id: "ေm", value: "me" }, //后加
+  { id: "ေy", value: "ye" }, //后加
+  { id: "ေr", value: "re" }, //后加
+  { id: "ေl", value: "le" }, //后加
+  { id: "ေv", value: "ve" }, //后加
+  { id: "ေs", value: "se" }, //后加
+  { id: "ေy", value: "ye" }, //后加
+  { id: "ေv", value: "ve" }, //后加
+  { id: "ေr", value: "re" }, //后加
+
+  { id: "ea", value: "e" }, //后加
+  { id: "eā", value: "o" }, //后加
+
+  { id: "၁", value: "1" },
+  { id: "၂", value: "2" },
+  { id: "၃", value: "3" },
+  { id: "၄", value: "4" },
+  { id: "၅", value: "5" },
+  { id: "၆", value: "6" },
+  { id: "၇", value: "7" },
+  { id: "၈", value: "8" },
+  { id: "၉", value: "9" },
+  { id: "၀", value: "0" },
+  { id: "း", value: "”" },
+  { id: "့", value: "’" },
+  { id: "။", value: "." },
+  { id: "၊", value: "," },
+];
+
+export const roman_to_my = (input: string | null): string | null => {
+  if (input === null) {
+    return input;
+  }
+  let txt = input.toLowerCase();
+
+  try {
+    for (const iterator of char_roman_to_myn) {
+      txt = txt.replaceAll(iterator.id, iterator.value);
+    }
+  } catch (err) {
+    //error
+    console.error(err);
+  }
+  return txt;
+};
+
+export const my_to_roman = (input: string | null): string | null => {
+  if (input === null) {
+    return input;
+  }
+  let txt = input.toLowerCase();
+
+  try {
+    for (const iterator of char_myn_to_roman_1) {
+      txt = txt.replaceAll(iterator.id, iterator.value);
+    }
+  } catch (err) {
+    //error
+    console.error(err);
+  }
+  return txt;
+};

+ 337 - 0
dashboard/src/components/code/si.ts

@@ -0,0 +1,337 @@
+const char_unicode_to_si = [
+  { id: "bbhr", value: "බ්භ්ර්" },
+  { id: "bbhv", value: "බ්භ්ව්" },
+  { id: "bbhy", value: "බ්භ්ය්" },
+  { id: "cchr", value: "ච්ඡ්ර්" },
+  { id: "cchv", value: "ච්ඡ්ව්" },
+  { id: "cchy", value: "ච්ඡ්ය්" },
+  { id: "ddhr", value: "ද්ධ්ර්" },
+  { id: "ddhv", value: "ද්ධ්ව්" },
+  { id: "ddhy", value: "ද්ධ්ය්" },
+  { id: "ḍḍhr", value: "ඩ්ඪ්ර්" },
+  { id: "ḍḍhv", value: "ඩ්ඪ්ව්" },
+  { id: "ḍḍhy", value: "ඩ්ඪ්ය්" },
+  { id: "gghr", value: "ග්ඝ්ර්" },
+  { id: "gghv", value: "ග්ඝ්ව්" },
+  { id: "gghy", value: "ග්ඝ්ය්" },
+  { id: "ṅkhr", value: "ඞ්ඛ්ර්" },
+  { id: "ṅkhv", value: "ඞ්ඛ්ව්" },
+  { id: "ṅkhy", value: "ඞ්ඛ්ය්" },
+  { id: "ṅghr", value: "ඞ්ඝ්ර්" },
+  { id: "ṅghv", value: "ඞ්ඝ්ව්" },
+  { id: "ṅghy", value: "ඞ්ඝ්ය්" },
+  { id: "jjhr", value: "ජ්ඣ්ර්" },
+  { id: "jjhv", value: "ජ්ඣ්ව්" },
+  { id: "jjhy", value: "ජ්ඣ්ය්" },
+  { id: "kkhr", value: "ක්ඛ්ර්" },
+  { id: "kkhv", value: "ක්ඛ්ව්" },
+  { id: "kkhy", value: "ක්ඛ්ය්" },
+  { id: "ñchr", value: "ඤ්ඡ්ර්" },
+  { id: "ñchv", value: "ඤ්ඡ්ව්" },
+  { id: "ñchy", value: "ඤ්ඡ්ය්" },
+  { id: "ñjhr", value: "ඤ්ඣ්ර්" },
+  { id: "ñjhv", value: "ඤ්ඣ්ව්" },
+  { id: "ñjhy", value: "ඤ්ඣ්ය්" },
+  { id: "ṇṭhr", value: "ණ්ඨ්ර්" },
+  { id: "ṇṭhv", value: "ණ්ඨ්ව්" },
+  { id: "ṇṭhy", value: "ණ්ඨ්ය්" },
+  { id: "ṇḍhr", value: "ණ්ඪ්ර්" },
+  { id: "ṇḍhv", value: "ණ්ඪ්ව්" },
+  { id: "ṇḍhy", value: "ණ්ඪ්ය්" },
+  { id: "nthr", value: "න්ථ්ර්" },
+  { id: "nthv", value: "න්ථ්ව්" },
+  { id: "nthy", value: "න්ථ්ය්" },
+  { id: "ndhr", value: "න්ධ්ර්" },
+  { id: "ndhv", value: "න්ධ්ව්" },
+  { id: "ndhy", value: "න්ධ්ය්" },
+  { id: "pphr", value: "ප්ඵ්ර්" },
+  { id: "pphv", value: "ප්ඵ්ව්" },
+  { id: "pphy", value: "ප්ඵ්ය්" },
+  { id: "mphr", value: "ම්ඵ්ර්" },
+  { id: "mphv", value: "ම්ඵ්ව්" },
+  { id: "mphy", value: "ම්ඵ්ය්" },
+  { id: "mbhr", value: "ම්භ්ර්" },
+  { id: "mbhv", value: "ම්භ්ව්" },
+  { id: "mbhy", value: "ම්භ්ය්" },
+  { id: "tthr", value: "ත්ථ්ර්" },
+  { id: "tthv", value: "ත්ථ්ව්" },
+  { id: "tthy", value: "ත්ථ්ය්" },
+  { id: "ṭṭhr", value: "ට්ඨ්ර්" },
+  { id: "ṭṭhv", value: "ට්ඨ්ව්" },
+  { id: "ṭṭhy", value: "ට්ඨ්ය්" },
+  { id: "bbr", value: "බ්බ්ර්" },
+  { id: "bbv", value: "බ්බ්ව්" },
+  { id: "bby", value: "බ්බ්ය්" },
+  { id: "ccr", value: "ච්ච්ර්" },
+  { id: "ccv", value: "ච්ච්ව්" },
+  { id: "ccy", value: "ච්ච්ය්" },
+  { id: "ddr", value: "ද්ද්ර්" },
+  { id: "ddv", value: "ද්ද්ව්" },
+  { id: "ddy", value: "ද්ද්ය්" },
+  { id: "ḍḍr", value: "ඩ්ඩ්ර්" },
+  { id: "ḍḍv", value: "ඩ්ඩ්ව්" },
+  { id: "ḍḍy", value: "ඩ්ඩ්ය්" },
+  { id: "ggr", value: "ග්ග්ර්" },
+  { id: "ggv", value: "ග්ග්ව්" },
+  { id: "ggy", value: "ග්ග්ය්" },
+  { id: "jjr", value: "ජ්ජ්ර්" },
+  { id: "jjv", value: "ජ්ජ්ව්" },
+  { id: "jjy", value: "ජ්ජ්ය්" },
+  { id: "ṅkr", value: "ඞ්ක්ර්" },
+  { id: "ṅkv", value: "ඞ්ක්ව්" },
+  { id: "ṅky", value: "ඞ්ක්ය්" },
+  { id: "ṅgr", value: "ඞ්ග්ර්" },
+  { id: "ṅgv", value: "ඞ්ග්ව්" },
+  { id: "ṅgy", value: "ඞ්ග්ය්" },
+  { id: "kkr", value: "ක්ක්ර්" },
+  { id: "kkv", value: "ක්ක්ව්" },
+  { id: "kky", value: "ක්ක්ය්" },
+  { id: "ñcr", value: "ඤ්ච්ර්" },
+  { id: "ñcv", value: "ඤ්ච්ව්" },
+  { id: "ñcy", value: "ඤ්ච්ය්" },
+  { id: "ñjr", value: "ඤ්ජ්ර්" },
+  { id: "ñjv", value: "ඤ්ජ්ව්" },
+  { id: "ñjy", value: "ඤ්ජ්ය්" },
+  { id: "mmr", value: "ම්ම්ර්" },
+  { id: "mmv", value: "ම්ම්ව්" },
+  { id: "mmy", value: "ම්ම්ය්" },
+  { id: "nnr", value: "න්න්ර්" },
+  { id: "nnv", value: "න්න්ව්" },
+  { id: "nny", value: "න්න්ය්" },
+  { id: "ṇṭr", value: "ණ්ට්ර්" },
+  { id: "ṇṭv", value: "ණ්ට්ව්" },
+  { id: "ṇṭy", value: "ණ්ට්ය්" },
+  { id: "ṇḍr", value: "ණ්ඩ්ර්" },
+  { id: "ṇḍv", value: "ණ්ඩ්ව්" },
+  { id: "ṇḍy", value: "ණ්ඩ්ය්" },
+  { id: "ññr", value: "ඤ්ඤ්ර්" },
+  { id: "ññv", value: "ඤ්ඤ්ව්" },
+  { id: "ññy", value: "ඤ්ඤ්ය්" },
+  { id: "ṇṇr", value: "ණ්ණ්ර්" },
+  { id: "ṇṇv", value: "ණ්ණ්ව්" },
+  { id: "ṇṇy", value: "ණ්ණ්ය්" },
+  { id: "ppr", value: "ප්ප්ර්" },
+  { id: "ppv", value: "ප්ප්ව්" },
+  { id: "ppy", value: "ප්ප්ය්" },
+  { id: "ntr", value: "න්ත්ර්" },
+  { id: "ntv", value: "න්ත්ව්" },
+  { id: "nty", value: "න්ත්ය්" },
+  { id: "ndr", value: "න්ද්ර්" },
+  { id: "ndv", value: "න්ද්ව්" },
+  { id: "ndy", value: "න්ද්ය්" },
+  { id: "ttr", value: "ත්ත්ර්" },
+  { id: "ttv", value: "ත්ත්ව්" },
+  { id: "tty", value: "ත්ත්ය්" },
+  { id: "mpr", value: "ම්ප්ර්" },
+  { id: "mpv", value: "ම්ප්ව්" },
+  { id: "mpy", value: "ම්ප්ය්" },
+  { id: "mbr", value: "ම්බ්ර්" },
+  { id: "mbv", value: "ම්බ්ව්" },
+  { id: "mby", value: "ම්බ්ය්" },
+  { id: "ṭṭr", value: "ට්ට්ර්" },
+  { id: "ṭṭv", value: "ට්ට්ව්" },
+  { id: "ṭṭy", value: "ට්ට්ය්" },
+  { id: "llr", value: "ල්ල්ර්" },
+  { id: "llv", value: "ල්ල්ව්" },
+  { id: "lly", value: "ල්ල්ය්" },
+  { id: "ssr", value: "ස්ස්ර්" },
+  { id: "ssv", value: "ස්ස්ව්" },
+  { id: "ssy", value: "ස්ස්ය්" },
+  { id: "yyr", value: "ය්ය්ර්" },
+  { id: "yyv", value: "ය්ය්ව්" },
+  { id: "yyy", value: "ය්ය්ය්" },
+  { id: "bbh", value: "බ්භ්" },
+  { id: "cch", value: "ච්ඡ්" },
+  { id: "ddh", value: "ද්ධ්" },
+  { id: "ḍḍh", value: "ඩ්ඪ්" },
+  { id: "ggh", value: "ග්ඝ්" },
+  { id: "jjh", value: "ජ්ඣ්" },
+  { id: "kkh", value: "ක්ඛ්" },
+  { id: "mbh", value: "ම්භ්" },
+  { id: "mph", value: "ම්ඵ්" },
+  { id: "ñch", value: "ඤ්ඡ්" },
+  { id: "bhr", value: "භ්ර්" },
+  { id: "bhv", value: "භ්ව්" },
+  { id: "bhy", value: "භ්ය්" },
+  { id: "chr", value: "ඡ්ර්" },
+  { id: "chv", value: "ඡ්ව්" },
+  { id: "chy", value: "ඡ්ය්" },
+  { id: "dhr", value: "ධ්ර්" },
+  { id: "dhv", value: "ධ්ව්" },
+  { id: "dhy", value: "ධ්ය්" },
+  { id: "ḍhr", value: "ඪ්ර්" },
+  { id: "ḍhv", value: "ඪ්ව්" },
+  { id: "ḍhy", value: "ඪ්ය්" },
+  { id: "ghr", value: "ඝ්ර්" },
+  { id: "ghv", value: "ඝ්ව්" },
+  { id: "ghy", value: "ඝ්ය්" },
+  { id: "jhr", value: "ඣ්ර්" },
+  { id: "jhv", value: "ඣ්ව්" },
+  { id: "jhy", value: "ඣ්ය්" },
+  { id: "khr", value: "ඛ්ර්" },
+  { id: "khv", value: "ඛ්ව්" },
+  { id: "khy", value: "ඛ්ය්" },
+  { id: "phr", value: "ඵ්ර්" },
+  { id: "phv", value: "ඵ්ව්" },
+  { id: "phy", value: "ඵ්ය්" },
+  { id: "thr", value: "ථ්ර්" },
+  { id: "thv", value: "ථ්ව්" },
+  { id: "thy", value: "ථ්ය්" },
+  { id: "ṭhr", value: "ඨ්ර්" },
+  { id: "ṭhv", value: "ඨ්ව්" },
+  { id: "ṭhy", value: "ඨ්ය්" },
+  { id: "ndh", value: "න්ධ්" },
+  { id: "ṇḍh", value: "ණ්ඪ්" },
+  { id: "ṅgh", value: "ඞ්ඝ්" },
+  { id: "ñjh", value: "ඤ්ඣ්" },
+  { id: "ṅkh", value: "ඞ්ඛ්" },
+  { id: "nth", value: "න්ථ්" },
+  { id: "ṇṭh", value: "ණ්ඨ්" },
+  { id: "pph", value: "ප්ඵ්" },
+  { id: "tth", value: "ත්ථ්" },
+  { id: "ṭṭh", value: "ට්ඨ්" },
+  { id: "bb", value: "බ්බ්" },
+  { id: "bh", value: "භ්" },
+  { id: "cc", value: "ච්ච්" },
+  { id: "ch", value: "ඡ්" },
+  { id: "dd", value: "ද්ද්" },
+  { id: "ḍḍ", value: "ඩ්ඩ්" },
+  { id: "dh", value: "ධ්" },
+  { id: "ḍh", value: "ඪ්" },
+  { id: "gg", value: "ග්ග්" },
+  { id: "gh", value: "ඝ්" },
+  { id: "jh", value: "ඣ්" },
+  { id: "jj", value: "ජ්ජ්" },
+  { id: "kh", value: "ඛ්" },
+  { id: "kk", value: "ක්ක්" },
+  { id: "ll", value: "ල්ල්" },
+  { id: "mb", value: "ම්බ්" },
+  { id: "mm", value: "ම්ම්" },
+  { id: "mp", value: "ම්ප්" },
+  { id: "ñc", value: "ඤ්ච්" },
+  { id: "nd", value: "න්ද්" },
+  { id: "ṇḍ", value: "ණ්ඩ්" },
+  { id: "ṅg", value: "ඞ්ග්" },
+  { id: "ñj", value: "ඤ්ජ්" },
+  { id: "ṅk", value: "ඞ්ක්" },
+  { id: "nn", value: "න්න්" },
+  { id: "ññ", value: "ඤ්ඤ්" },
+  { id: "ṇṇ", value: "ණ්ණ්" },
+  { id: "nt", value: "න්ත්" },
+  { id: "br", value: "බ්ර්" },
+  { id: "bv", value: "බ්ව්" },
+  { id: "by", value: "බ්ය්" },
+  { id: "cr", value: "ච්ර්" },
+  { id: "cv", value: "ච්ව්" },
+  { id: "cy", value: "ච්ය්" },
+  { id: "dr", value: "ද්ර්" },
+  { id: "dv", value: "ද්ව්" },
+  { id: "dy", value: "ද්ය්" },
+  { id: "ḍr", value: "ඩ්ර්" },
+  { id: "ḍv", value: "ඩ්ව්" },
+  { id: "ḍy", value: "ඩ්ය්" },
+  { id: "gr", value: "ග්ර්" },
+  { id: "gv", value: "ග්ව්" },
+  { id: "gy", value: "ග්ය්" },
+  { id: "jr", value: "ජ්ර්" },
+  { id: "jv", value: "ජ්ව්" },
+  { id: "jy", value: "ජ්ය්" },
+  { id: "kr", value: "ක්ර්" },
+  { id: "kv", value: "ක්ව්" },
+  { id: "ky", value: "ක්ය්" },
+  { id: "pr", value: "ප්ර්" },
+  { id: "pv", value: "ප්ව්" },
+  { id: "py", value: "ප්ය්" },
+  { id: "tr", value: "ත්ර්" },
+  { id: "tv", value: "ත්ව්" },
+  { id: "ty", value: "ත්ය්" },
+  { id: "ṭr", value: "ට්ර්" },
+  { id: "ṭv", value: "ට්ව්" },
+  { id: "ṭy", value: "ට්ය්" },
+  { id: "ñh", value: "ඤ්හ්" },
+  { id: "ṇh", value: "ණ්හ්" },
+  { id: "nh", value: "න්හ්" },
+  { id: "mh", value: "ම්හ්" },
+  { id: "yh", value: "ය්හ්" },
+  { id: "ly", value: "ල්ය්" },
+  { id: "lh", value: "ල්හ්" },
+  { id: "vh", value: "ව්හ්" },
+  { id: "sm", value: "ස්ම්" },
+  { id: "sv", value: "ස්ව්" },
+  { id: "hm", value: "හ්ම්" },
+  { id: "hv", value: "හ්ව්" },
+  { id: "ḷh", value: "ළ්හ්" },
+  { id: "ṇṭ", value: "ණ්ට්" },
+  { id: "ph", value: "ඵ්" },
+  { id: "pp", value: "ප්ප්" },
+  { id: "ss", value: "ස්ස්" },
+  { id: "th", value: "ථ්" },
+  { id: "ṭh", value: "ඨ්" },
+  { id: "tt", value: "ත්ත්" },
+  { id: "ṭṭ", value: "ට්ට්" },
+  { id: "yy", value: "ය්ය්" },
+  { id: "b", value: "බ්" },
+  { id: "c", value: "ච්" },
+  { id: "d", value: "ද්" },
+  { id: "ḍ", value: "ඩ්" },
+  { id: "g", value: "ග්" },
+  { id: "h", value: "හ්" },
+  { id: "j", value: "ජ්" },
+  { id: "k", value: "ක්" },
+  { id: "l", value: "ල්" },
+  { id: "ḷ", value: "ළ්" },
+  { id: "m", value: "ම්" },
+  { id: "n", value: "න්" },
+  { id: "ṅ", value: "ඞ්" },
+  { id: "ñ", value: "ඤ්" },
+  { id: "ṇ", value: "ණ්" },
+  { id: "p", value: "ප්" },
+  { id: "r", value: "‍ර්" },
+  { id: "s", value: "ස්" },
+  { id: "t", value: "ත්" },
+  { id: "ṭ", value: "ට්" },
+  { id: "v", value: "ව්" },
+  { id: "y", value: "‍ය්" },
+  { id: "්iṃ", value: "ිං" },
+  { id: "්uṃ", value: "ුං" },
+  { id: "්aṃ", value: "ං" },
+  { id: "්ā", value: "ා" },
+  { id: "්i", value: "ි" },
+  { id: "්ī", value: "ී" },
+  { id: "්u", value: "ු" },
+  { id: "්ū", value: "ූ" },
+  { id: "්e", value: "ෙ" },
+  { id: "්ē", value: "ේ" },
+  { id: "්o", value: "ො" },
+  { id: "්ō", value: "ෝ" },
+  { id: "්", value: "්" },
+  { id: "aṃ", value: "අං" },
+  { id: "iṃ", value: "ඉං" },
+  { id: "uṃ", value: "උං" },
+  { id: "්a", value: "" },
+  { id: "a", value: "අ" },
+  { id: "ā", value: "ආ" },
+  { id: "i", value: "ඉ" },
+  { id: "ī", value: "ඊ" },
+  { id: "u", value: "උ" },
+  { id: "ū", value: "ඌ" },
+  { id: "e", value: "එ" },
+  { id: "o", value: "ඔ" },
+];
+
+export const roman_to_si = (input: string | null): string | null => {
+  if (input === null) {
+    return input;
+  }
+  let txt = input.toLowerCase();
+
+  try {
+    for (const iterator of char_unicode_to_si) {
+      txt = txt.replaceAll(iterator.id, iterator.value);
+    }
+  } catch (err) {
+    //error
+    console.error(err);
+  }
+  return txt;
+};

+ 677 - 0
dashboard/src/components/code/tai-tham.ts

@@ -0,0 +1,677 @@
+const char_roman_to_tai = [
+  //{ id: "n’</w>ti<w>", value: "nti" },
+  { id: "ndr", value: "nrd" },
+  { id: "ntr", value: "nrt" },
+  { id: "bbho", value: "ᨻᩮ᩠ᨽᩣ" },
+  { id: "ccho", value: "ᨧᩮ᩠ᨨᩣ" },
+  { id: "ddho", value: "ᨴᩮ᩠ᨵᩣ" },
+  { id: "ḍḍho", value: "ᨯᩮ᩠ᨰᩣ" },
+  { id: "ggho", value: "ᨣᩮ᩠ᨥᩣ" },
+  { id: "jjho", value: "ᨩᩮ᩠ᨫᩣ" },
+  { id: "kkho", value: "ᨠᩮ᩠ᨡᩣ" },
+  { id: "mbho", value: "ᨾᩮ᩠ᨽᩣ" },
+  { id: "mpho", value: "ᨾᩮ᩠ᨹᩣ" },
+  { id: "ndho", value: "ᨶᩮᩣ᩠ᨵ" },
+  { id: "ntho", value: "ᨶᩮᩣ᩠ᨳ" },
+  { id: "ndhā", value: "ᨶᩣ᩠ᨵ" },
+  { id: "nthā", value: "ᨶᩣ᩠ᨳ" },
+  { id: "ṅgho", value: "ᩘᨥᩮᩣ" }, //  "ᩘᩮ᩠ᨿᩣ
+  { id: "ṅkho", value: "ᩘᨡᩮᩣ" }, // "ᩘᩮ᩠ᨡᩣ"
+  { id: "ñcho", value: "ᨬᩮ᩠ᨨᩣ" },
+  { id: "ñjho", value: "ᨬᩮ᩠ᨫᩣ" },
+  { id: "ṇḍho", value: "ᨱᩮ᩠ᨰᩣ" },
+  { id: "ṇṭho", value: "ᨱᩮ᩠ᨮᩣ" },
+  { id: "ppho", value: "ᨷᩮ᩠ᨹᩣ" },
+  { id: "ttho", value: "ᨲᩮ᩠ᨳᩣ" },
+  { id: "ṭṭho", value: "ᨭᩛᩮᩣ" },
+  { id: "bbhe", value: "ᨻᩮ᩠ᨽ" },
+  { id: "mbhe", value: "ᨾᩮ᩠ᨽ" },
+  { id: "cche", value: "ᨧᩮ᩠ᨨ" },
+  { id: "ñche", value: "ᨬᩮ᩠ᨨ" },
+  { id: "ddhe", value: "ᨴᩮ᩠ᨵ" },
+  { id: "ndhe", value: "ᨶᩮ᩠ᨵ" },
+  { id: "ḍḍhe", value: "ᨯᩮ᩠ᨰ" },
+  { id: "ṇḍhe", value: "ᨱᩮ᩠ᨰ" },
+  { id: "gghe", value: "ᨣᩮ᩠ᨥ" },
+  { id: "ṅghe", value: "ᩘᨥᩮ" }, //  "ᩘᩮ᩠ᨿ
+  { id: "ṅkhe", value: "ᩘᨡᩮ" }, // "ᩘᩮ᩠ᨡ
+  { id: "jjhe", value: "ᨩᩮ᩠ᨫ" },
+  { id: "ñjhe", value: "ᨬᩮ᩠ᨫ" },
+  { id: "kkhe", value: "ᨠᩮ᩠ᨡ" },
+  { id: "mphe", value: "ᨾᩮ᩠ᨹ" },
+  { id: "pphe", value: "ᨷᩮ᩠ᨹ" },
+  { id: "nthe", value: "ᨶᩮ᩠ᨳ" },
+  { id: "tthe", value: "ᨲᩮ᩠ᨳ" },
+  { id: "ṇṭhe", value: "ᨱᩮ᩠ᨮ" },
+  { id: "ṭṭhe", value: "ᨭᩛᩮ" },
+  { id: "bbo", value: "ᨻᩮ᩠ᨻᩣ" },
+  { id: "cco", value: "ᨧᩮ᩠ᨧᩣ" },
+  { id: "ddo", value: "ᨴᩮ᩠ᨴᩣ" },
+  { id: "dvo", value: "ᨴᩮ᩠ᩅᩣ" },
+  { id: "ḍḍo", value: "ᨯᩮ᩠ᨯᩣ" },
+  { id: "ggo", value: "ᨣᩮ᩠ᨣᩣ" },
+  { id: "hro", value: "ᩉᩮ᩠ᩕᩣ" },
+  { id: "hvo", value: "ᩉᩮ᩠ᩅᩣ" },
+  { id: "hyo", value: "ᩉᩮ᩠ᨿᩣ" },
+  { id: "jjo", value: "ᨩᩮ᩠ᨩᩣ" },
+  { id: "kko", value: "ᨠᩮ᩠ᨠᩣ" },
+  { id: "kro", value: "ᨠᩮ᩠ᩕᩣ" },
+  { id: "mbo", value: "ᨾᩮ᩠ᨻᩣ" },
+  { id: "llo", value: "ᩃᩮ᩠ᩃᩣ" },
+  { id: "mmo", value: "ᨾᩮᩜᩣ" },
+  { id: "mpo", value: "ᨾᩮ᩠ᨷᩣ" },
+  { id: "ndo", value: "ᨶᩮᩣ᩠ᨴ" },
+  { id: "nno", value: "ᨶᩮᩣ᩠ᨶ" },
+  { id: "nto", value: "ᨶᩮᩣ᩠ᨲ" },
+  { id: "ndā", value: "ᨶᩣ᩠ᨴ" },
+  { id: "nnā", value: "ᨶᩣ᩠ᨶ" },
+  { id: "ntā", value: "ᨶᩣ᩠ᨲ" },
+  { id: "ṅgo", value: "ᩘ ᨣᩮᩤ" }, //  ᩘᩮ᩠ᨣᩣ
+  { id: "ṅko", value: "ᩘᨠᩮᩣ" }, //  ᩘᩮ᩠ᨠᩣ
+  { id: "ñco", value: "ᨬᩮ᩠ᨧᩣ" },
+  { id: "ñjo", value: "ᨬᩮ᩠ᨩᩣ" },
+  { id: "ñño", value: "ᨬᩮ᩠ᨬᩣ" },
+  { id: "ṇḍo", value: "ᨱᩮ᩠ᨯᩣ" },
+  { id: "ṇṇo", value: "ᨱᩮ᩠ᨱᩣ" },
+  { id: "ṇṭo", value: "ᨱᩮ᩠ᨭᩣ" },
+  { id: "ppo", value: "ᨷᩮ᩠ᨷᩣ" },
+  { id: "rho", value: "ᩁᩮ᩠ᩉᩣ" },
+  { id: "rvo", value: "ᩁᩮ᩠ᩅᩣ" },
+  { id: "ryo", value: "ᩁᩮ᩠ᨿᩣ" },
+  { id: "tto", value: "ᨲᩮ᩠ᨲᩣ" },
+  { id: "tvo", value: "ᨲᩮ᩠ᩅᩣ" },
+  { id: "ṭṭo", value: "ᨭᩮ᩠ᨭᩣ" },
+  { id: "vho", value: "ᩅᩮ᩠ᩉᩣ" },
+  { id: "vro", value: "ᩅᩮ᩠ᩕᩣ" },
+  { id: "vyo", value: "ᩅᩮ᩠ᨿᩣ" },
+  { id: "yho", value: "ᨿᩮ᩠ᩉᩣ" },
+  { id: "yro", value: "ᨿᩮ᩠ᩕᩣ" },
+  { id: "yvo", value: "ᨿᩮ᩠ᩅᩣ" },
+  { id: "yyo", value: "ᨿᩮ᩠ᨿᩣ" },
+  { id: "bbe", value: "ᨻᩮ᩠ᨻ" },
+  { id: "mbe", value: "ᨾᩮ᩠ᨻ" },
+  { id: "cce", value: "ᨧᩮ᩠ᨧ" },
+  { id: "ñce", value: "ᨬᩮ᩠ᨧ" },
+  { id: "dde", value: "ᨴᩮ᩠ᨴ" },
+  { id: "nde", value: "ᨶᩮ᩠ᨴ" },
+  { id: "ḍḍe", value: "ᨯᩮ᩠ᨯ" },
+  { id: "ṇḍe", value: "ᨱᩮ᩠ᨯ" },
+  { id: "gge", value: "ᨣᩮ᩠ᨣ" },
+  { id: "ṅge", value: "ᩘᨣᩮ" }, // "ᩘᩮ᩠ᨣ
+  { id: "rhe", value: "ᩁᩮ᩠ᩉ" },
+  { id: "vhe", value: "ᩅᩮ᩠ᩉ" },
+  { id: "yhe", value: "ᨿᩮ᩠ᩉ" },
+  { id: "jje", value: "ᨩᩮ᩠ᨩ" },
+  { id: "ñje", value: "ᨬᩮ᩠ᨩ" },
+  { id: "kke", value: "ᨠᩮ᩠ᨠ" },
+  { id: "ṅke", value: "ᩘᨠᩮ" }, //  ᩘᩮ᩠ᨠ
+  { id: "mme", value: "ᨾᩮᩜ" },
+  { id: "lle", value: "ᩃᩮ᩠ᩃ" },
+  { id: "nne", value: "ᨶᩮ᩠ᨶ" },
+  { id: "ññe", value: "ᨬᩮ᩠ᨬ" },
+  { id: "ṇṇe", value: "ᨱᩮ᩠ᨱ" },
+  { id: "mpe", value: "ᨾᩮ᩠ᨷ" },
+  { id: "ppe", value: "ᨷᩮ᩠ᨷ" },
+  { id: "hre", value: "ᩉᩮ᩠ᩕ" },
+  { id: "kre", value: "ᨠᩮ᩠ᩕ" },
+  { id: "vre", value: "ᩅᩮ᩠ᩕ" },
+  { id: "yre", value: "ᨿᩮ᩠ᩕ" },
+  { id: "nte", value: "ᨶᩮ᩠ᨲ" },
+  { id: "tte", value: "ᨲᩮ᩠ᨲ" },
+  { id: "ṇṭe", value: "ᨱᩮ᩠ᨭ" },
+  { id: "ṭṭe", value: "ᨭᩮ᩠ᨭ" },
+  { id: "dve", value: "ᨴᩮ᩠ᩅ" },
+  { id: "hve", value: "ᩉᩮ᩠ᩅ" },
+  { id: "rve", value: "ᩁᩮ᩠ᩅ" },
+  { id: "tve", value: "ᨲᩮ᩠ᩅ" },
+  { id: "yve", value: "ᨿᩮ᩠ᩅ" },
+  { id: "hye", value: "ᩉᩮ᩠ᨿ" },
+  { id: "rye", value: "ᩁᩮ᩠ᨿ" },
+  { id: "vye", value: "ᩅᩮ᩠ᨿ" },
+  { id: "yye", value: "ᨿᩮ᩠ᨿ" },
+  //{ id: "mmā", value: "ᨾᩜᩣ" },
+  //{ id: "mma", value: "ᨾᩜ" },
+  { id: "by", value: "ᨻ᩠ᨿ᩠" },
+  { id: "ṭṭh", value: "ᨭᩛ᩠" },
+
+  { id: "ss", value: "ᩔ᩠" },
+  { id: "vh", value: "ᩅ᩠ᩉ᩠" },
+  { id: "vy", value: "ᩅ᩠ᨿ᩠" },
+  { id: "vr", value: "ᩅᩕ᩠" },
+  { id: "yh", value: "ᨿ᩠ᩉ᩠" },
+  { id: "yy", value: "ᨿ᩠ᨿ᩠" },
+  { id: "yr", value: "ᨿᩕ᩠" },
+  { id: "yv", value: "ᨿ᩠ᩅ᩠" },
+  { id: "hy", value: "ᩉ᩠ᨿ᩠" },
+  { id: "hr", value: "ᩉᩕ᩠" },
+  { id: "hv", value: "ᩉ᩠ᩅ᩠" },
+  { id: "rv", value: "ᩁ᩠ᩅ᩠" },
+  { id: "rh", value: "ᩁ᩠ᩉ᩠" },
+  { id: "ry", value: "ᩁ᩠ᨿ᩠" },
+  { id: "kh", value: "ᨡ᩠" },
+  { id: "gh", value: "ᨥ᩠" },
+  { id: "ch", value: "ᨨ᩠" },
+  { id: "jh", value: "ᨫ᩠" },
+  { id: "ññ", value: "ᨬ᩠ᨬ᩠" },
+  { id: "ṭh", value: "ᨮ᩠" },
+  { id: "ḍh", value: "ᨰ᩠" },
+  { id: "th", value: "ᨳ᩠" },
+  { id: "dh", value: "ᨵ᩠" },
+  { id: "ph", value: "ᨹ᩠" },
+  { id: "bh", value: "ᨽ᩠" },
+  { id: "k", value: "ᨠ᩠" },
+  { id: "g", value: "ᨣ᩠" },
+  { id: "c", value: "ᨧ᩠" },
+  { id: "j", value: "ᨩ᩠" },
+  { id: "ñ", value: "ᨬ᩠" },
+  { id: "ḷ", value: "ᩊ᩠" },
+  { id: "ṭ", value: "ᨭ᩠" },
+  { id: "ḍ", value: "ᨯ᩠" },
+  { id: "ṇ", value: "ᨱ᩠" },
+  { id: "t", value: "ᨲ᩠" },
+  { id: "d", value: "ᨴ᩠" },
+  { id: "n", value: "ᨶ᩠" },
+  { id: "p", value: "ᨷ᩠" },
+  { id: "b", value: "ᨻ᩠" },
+  { id: "m", value: "ᨾ᩠" },
+  { id: "l", value: "ᩃ᩠" },
+  { id: "s", value: "ᩈ᩠" },
+  { id: "ṅ", value: "ᩘ" },
+  { id: "᩠h", value: "᩠ᩉ᩠" },
+  { id: "h", value: "ᩉ᩠" },
+  { id: "᩠y", value: "᩠ᨿ" },
+  { id: "y", value: "ᨿ᩠" },
+  { id: "᩠r", value: "ᩕ᩠" },
+  { id: "r", value: "ᩁ᩠" },
+  { id: "᩠v", value: "᩠ᩅ᩠" },
+  { id: "v", value: "ᩅ᩠" },
+  { id: "᩠ᨾ", value: "ᩜ" },
+  { id: "᩠ai", value: "ᩱ" },
+  { id: "᩠aṃ", value: "ᩴ" },
+  { id: "᩠iṃ", value: "ᩥᩴ" },
+  { id: "᩠uṃ", value: "ᩩᩴ" },
+  { id: "᩠ā", value: "ᩣ" },
+  { id: "᩠i", value: "ᩥ" },
+  { id: "᩠ī", value: "ᩦ" },
+  { id: "᩠u", value: "ᩩ" },
+  { id: "᩠ū", value: "ᩪ" },
+  { id: "᩠e", value: "ᩮ" },
+  { id: "᩠o", value: "ᩮᩣ" },
+  { id: "aṃ", value: "ᩋᩴ" },
+  { id: "iṃ", value: "ᨠ᩠ᨠᩴ" },
+  { id: "uṃ", value: "ᩏᩴ" },
+  { id: "a", value: "ᩋ" },
+  { id: "ā", value: "ᩋᩣ" },
+  { id: "i", value: "ᩍ" },
+  { id: "ī", value: "ᩎ" },
+  { id: "u", value: "ᩏ" },
+  { id: "ū", value: "ᩐ" },
+  { id: "e", value: "ᩑ" },
+  { id: "o", value: "ᩒ" },
+  { id: "᩠᩼ᩋ", value: "" },
+  { id: "᩠ᩋ", value: "" },
+  //{ id: "ᨡᩮᩣ", value: "ᨡᩮᩤ" },
+  //{ id: "ᨡᩣ", value: "ᨡᩤ" },
+  { id: "ᨠ᩠ᨡᩮᩤ", value: "ᨠᩮ᩠ᨡᩣ" },
+  { id: "က᩠ခါ", value: "ᨠ᩠ᨡᩣ" },
+  { id: "ဂော", value: "ᨣᩮᩤ" },
+  //{ id: "ᨦᩮᩣ", value: "ᨦᩮᩤ" },
+  { id: "ᨴᩮᩣ", value: "ᨴᩮᩤ" },
+  { id: "ᨷᩮᩣ", value: "ᨷᩮᩤ" },
+  { id: "ᩅᩮᩣ", value: "ᩅᩮᩤ" },
+  { id: "ᨣᩣ", value: "ᨣᩤ" },
+  //{ id: "ᨦᩣ", value: "ᨦᩤ" },
+  { id: "ᨴᩣ", value: "ᨴᩤ" },
+  { id: "ᨵᩣ", value: "ᨵᩤ" },
+  { id: "ᨷᩣ", value: "ᨷᩤ" },
+  { id: "ᩅᩣ", value: "ᩅᩤ" },
+  { id: "ᨴ᩠ᩅᩣ", value: "ᨴ᩠ᩅᩤ" },
+  { id: "ᩘ ", value: "ᩘ" },
+  { id: "ᨷ᩠ᨷᩤ", value: "ᨷ᩠ᨷᩣ" },
+  { id: "ᨲ᩠ᩅᩤ", value: "ᨲ᩠ᩅᩣ" },
+  { id: "ᩈ᩠ᩅᩤ", value: "ᩈ᩠ᩅᩣ" },
+  { id: "ᩮ᩠ᨷᩤ", value: "ᩮ᩠ᨷᩣ" },
+];
+
+/*
+const char_tai_to_roman = [
+  { id: "ᨻᩮ᩠ᨽᩣ", value: "bbho" },
+  { id: "ᨧᩮ᩠ᨨᩣ", value: "ccho" },
+  { id: "ᨴᩮ᩠ᨵᩣ", value: "ddho" },
+  { id: "ᨯᩮ᩠ᨰᩣ", value: "ḍḍho" },
+  { id: "ᨣᩮ᩠ᨥᩣ", value: "ggho" },
+  { id: "ᨩᩮ᩠ᨫᩣ", value: "jjho" },
+  { id: "ᨠᩮ᩠ᨡᩣ", value: "kkho" },
+  { id: "ᨾᩮ᩠ᨽᩣ", value: "mbho" },
+  { id: "ᨾᩮ᩠ᨹᩣ", value: "mpho" },
+  { id: "ᨶᩮᩣ᩠ᨵ", value: "ndho" },
+  { id: "ᨶᩮᩣ᩠ᨳ", value: "ntho" },
+  { id: "ᨶᩣ᩠ᨵ", value: "ndhā" },
+  { id: "ᨶᩣ᩠ᨳ", value: "nthā" },
+  { id: "ᩘᨥᩮᩣ", value: "ṅgho" },
+  { id: "ᩘᨡᩮᩣ", value: "ṅkho" },
+  { id: "ᨬᩮ᩠ᨨᩣ", value: "ñcho" },
+  { id: "ᨬᩮ᩠ᨫᩣ", value: "ñjho" },
+  { id: "ᨱᩮ᩠ᨰᩣ", value: "ṇḍho" },
+  { id: "ᨱᩮ᩠ᨮᩣ", value: "ṇṭho" },
+  { id: "ᨷᩮ᩠ᨹᩣ", value: "ppho" },
+  { id: "ᨲᩮ᩠ᨳᩣ", value: "ttho" },
+  { id: "ᨭᩛᩮᩣ", value: "ṭṭho" },
+  { id: "ᨻᩮ᩠ᨽ", value: "bbhe" },
+  { id: "ᨾᩮ᩠ᨽ", value: "mbhe" },
+  { id: "ᨧᩮ᩠ᨨ", value: "cche" },
+  { id: "ᨬᩮ᩠ᨨ", value: "ñche" },
+  { id: "ᨴᩮ᩠ᨵ", value: "ddhe" },
+  { id: "ᨶᩮ᩠ᨵ", value: "ndhe" },
+  { id: "ᨯᩮ᩠ᨰ", value: "ḍḍhe" },
+  { id: "ᨱᩮ᩠ᨰ", value: "ṇḍhe" },
+  { id: "ᨣᩮ᩠ᨥ", value: "gghe" },
+  { id: "ᩘᨥᩮ", value: "ṅghe" },
+  { id: "ᩘᨡᩮ", value: "ṅkhe" },
+  { id: "ᨩᩮ᩠ᨫ", value: "jjhe" },
+  { id: "ᨬᩮ᩠ᨫ", value: "ñjhe" },
+  { id: "ᨠᩮ᩠ᨡ", value: "kkhe" },
+  { id: "ᨾᩮ᩠ᨹ", value: "mphe" },
+  { id: "ᨷᩮ᩠ᨹ", value: "pphe" },
+  { id: "ᨶᩮ᩠ᨳ", value: "nthe" },
+  { id: "ᨲᩮ᩠ᨳ", value: "tthe" },
+  { id: "ᨱᩮ᩠ᨮ", value: "ṇṭhe" },
+  { id: "ᨭᩛᩮ", value: "ṭṭhe" },
+  { id: "ᨻᩮ᩠ᨻᩣ", value: "bbo" },
+  { id: "ᨧᩮ᩠ᨧᩣ", value: "cco" },
+  { id: "ᨴᩮ᩠ᨴᩣ", value: "ddo" },
+  { id: "ᨴᩮ᩠ᩅᩣ", value: "dvo" },
+  { id: "ᨯᩮ᩠ᨯᩣ", value: "ḍḍo" },
+  { id: "ᨣᩮ᩠ᨣᩣ", value: "ggo" },
+  { id: "ᩉᩮ᩠ᩕᩣ", value: "hro" },
+  { id: "ᩉᩮ᩠ᩅᩣ", value: "hvo" },
+  { id: "ᩉᩮ᩠ᨿᩣ", value: "hyo" },
+  { id: "ᨩᩮ᩠ᨩᩣ", value: "jjo" },
+  { id: "ᨠᩮ᩠ᨠᩣ", value: "kko" },
+  { id: "ᨠᩮ᩠ᩕᩣ", value: "kro" },
+  { id: "ᨾᩮ᩠ᨻᩣ", value: "mbo" },
+  { id: "ᨾᩮᩜᩣ", value: "mmo" },
+  { id: "ᨾᩮ᩠ᨾᩣ", value: "mmo" },
+  { id: "ᨾᩮ᩠ᨷᩣ", value: "mpo" },
+  { id: "ᨶᩮᩣ᩠ᨴ", value: "ndo" },
+  { id: "ᨶᩮᩣ᩠ᨶ", value: "nno" },
+  { id: "ᨶᩮᩣ᩠ᨲ", value: "nto" },
+  { id: "ᨶᩣ᩠ᨴ", value: "ndā" },
+  { id: "ᨶᩣ᩠ᨶ", value: "nnā" },
+  { id: "ᨶᩣ᩠ᨲ", value: "ntā" },
+  { id: "ᩘ ᨣᩮᩤ", value: "ṅgo" },
+  { id: "ᩘᨠᩮᩣ", value: "ṅko" },
+  { id: "ᨬᩮ᩠ᨧᩣ", value: "ñco" },
+  { id: "ᨬᩮ᩠ᨩᩣ", value: "ñjo" },
+  { id: "ᨬᩮ᩠ᨬᩣ", value: "ñño" },
+  { id: "ᨱᩮ᩠ᨯᩣ", value: "ṇḍo" },
+  { id: "ᨱᩮ᩠ᨱᩣ", value: "ṇṇo" },
+  { id: "ᨱᩮ᩠ᨭᩣ", value: "ṇṭo" },
+  { id: "ᨷᩮ᩠ᨷᩣ", value: "ppo" },
+  { id: "ᩁᩮ᩠ᩉᩣ", value: "rho" },
+  { id: "ᩁᩮ᩠ᩅᩣ", value: "rvo" },
+  { id: "ᩁᩮ᩠ᨿᩣ", value: "ryo" },
+  { id: "ᨲᩮ᩠ᨲᩣ", value: "tto" },
+  { id: "ᨲᩮ᩠ᩅᩣ", value: "tvo" },
+  { id: "ᨭᩮ᩠ᨭᩣ", value: "ṭṭo" },
+  { id: "ᩅᩮ᩠ᩉᩣ", value: "vho" },
+  { id: "ᩅᩮ᩠ᩕᩣ", value: "vro" },
+  { id: "ᩅᩮ᩠ᨿᩣ", value: "vyo" },
+  { id: "ᨿᩮ᩠ᩉᩣ", value: "yho" },
+  { id: "ᨿᩮ᩠ᩕᩣ", value: "yro" },
+  { id: "ᨿᩮ᩠ᩅᩣ", value: "yvo" },
+  { id: "ᨿᩮ᩠ᨿᩣ", value: "yyo" },
+  { id: "ᨻᩮ᩠ᨻ", value: "bbe" },
+  { id: "ᨾᩮ᩠ᨻ", value: "mbe" },
+  { id: "ᨧᩮ᩠ᨧ", value: "cce" },
+  { id: "ᨬᩮ᩠ᨧ", value: "ñce" },
+  { id: "ᨴᩮ᩠ᨴ", value: "dde" },
+  { id: "ᨶᩮ᩠ᨴ", value: "nde" },
+  { id: "ᨯᩮ᩠ᨯ", value: "ḍḍe" },
+  { id: "ᨱᩮ᩠ᨯ", value: "ṇḍe" },
+  { id: "ᨣᩮ᩠ᨣ", value: "gge" },
+  { id: "ᩘᨣᩮ", value: "ṅge" },
+  { id: "ᩁᩮ᩠ᩉ", value: "rhe" },
+  { id: "ᩅᩮ᩠ᩉ", value: "vhe" },
+  { id: "ᨿᩮ᩠ᩉ", value: "yhe" },
+  { id: "ᨩᩮ᩠ᨩ", value: "jje" },
+  { id: "ᨬᩮ᩠ᨩ", value: "ñje" },
+  { id: "ᨠᩮ᩠ᨠ", value: "kke" },
+  { id: "ᩘᨠᩮ", value: "ṅke" },
+  { id: "ᨾᩮᩜ", value: "mmo" },
+  { id: "ᨾᩮ᩠ᨾ", value: "mme" },
+  { id: "ᨶᩮ᩠ᨶ", value: "nne" },
+  { id: "ᨬᩮ᩠ᨬ", value: "ññe" },
+  { id: "ᨱᩮ᩠ᨱ", value: "ṇṇe" },
+  { id: "ᨾᩮ᩠ᨷ", value: "mpe" },
+  { id: "ᨷᩮ᩠ᨷ", value: "ppe" },
+  { id: "ᩉᩮ᩠ᩕ", value: "hre" },
+  { id: "ᨠᩮ᩠ᩕ", value: "kre" },
+  { id: "ᩅᩮ᩠ᩕ", value: "vre" },
+  { id: "ᨿᩮ᩠ᩕ", value: "yre" },
+  { id: "ᨶᩮ᩠ᨲ", value: "nte" },
+  { id: "ᨲᩮ᩠ᨲ", value: "tte" },
+  { id: "ᨱᩮ᩠ᨭ", value: "ṇṭe" },
+  { id: "ᨭᩮ᩠ᨭ", value: "ṭṭe" },
+  { id: "ᨴᩮ᩠ᩅ", value: "dve" },
+  { id: "ᩉᩮ᩠ᩅ", value: "hve" },
+  { id: "ᩁᩮ᩠ᩅ", value: "rve" },
+  { id: "ᨲᩮ᩠ᩅ", value: "tve" },
+  { id: "ᨿᩮ᩠ᩅ", value: "yve" },
+  { id: "ᩉᩮ᩠ᨿ", value: "hye" },
+  { id: "ᩁᩮ᩠ᨿ", value: "rye" },
+  { id: "ᩅᩮ᩠ᨿ", value: "vye" },
+  { id: "ᨿᩮ᩠ᨿ", value: "yye" },
+  { id: "ᨾᩜᩣ", value: "mmā" },
+
+  { id: "ᩜ", value: "᩠ma" },
+  { id: "ᩱ", value: "᩠ai" },
+  { id: "ᩴ", value: "᩠aṃ" },
+  { id: "ᩥᩴ", value: "᩠iṃ" },
+  { id: "ᩩᩴ", value: "᩠uṃ" },
+  { id: "ᩣ", value: "᩠ā" },
+  { id: "ᩤ", value: "᩠ā" },
+  { id: "ᩥ", value: "᩠i" },
+  { id: "ᩦ", value: "᩠ī" },
+  { id: "ᩩ", value: "᩠u" },
+  { id: "ᩪ", value: "᩠ū" },
+  { id: "ᩮ", value: "᩠e" },
+  { id: "ᩮᩣ", value: "᩠o" },
+
+  { id: "ᨾᩜ", value: "mma" },
+  { id: "ᨻ᩠ᨿ᩠", value: "by" },
+  { id: "ᨭᩛ᩠", value: "ṭṭh" },
+  { id: "ᩔ᩠", value: "ss" },
+  { id: "ᩅ᩠ᩉ᩠", value: "vh" },
+  { id: "ᩅ᩠ᨿ᩠", value: "vy" },
+  { id: "ᩅᩕ᩠", value: "vr" },
+  { id: "ᨿ᩠ᩉ᩠", value: "yh" },
+  { id: "ᨿ᩠ᨿ᩠", value: "yy" },
+  { id: "ᨿᩕ᩠", value: "yr" },
+  { id: "ᨿ᩠ᩅ᩠", value: "yv" },
+  { id: "ᩉ᩠ᨿ᩠", value: "hy" },
+  { id: "ᩉᩕ᩠", value: "hr" },
+  { id: "ᩉ᩠ᩅ᩠", value: "hv" },
+  { id: "ᩁ᩠ᩅ᩠", value: "rv" },
+  { id: "ᩁ᩠ᩉ᩠", value: "rh" },
+  { id: "ᩁ᩠ᨿ᩠", value: "ry" },
+  { id: "ᨡ᩠", value: "kh" },
+  { id: "ᨥ᩠", value: "gh" },
+  { id: "ᨨ᩠", value: "ch" },
+  { id: "ᨫ᩠", value: "jh" },
+  { id: "ᨬ᩠ᨬ᩠", value: "ññ" },
+  { id: "ᨮ᩠", value: "ṭh" },
+  { id: "ᨰ᩠", value: "ḍh" },
+  { id: "ᨳ᩠", value: "th" },
+  { id: "ᨵ᩠", value: "dh" },
+  { id: "ᨹ᩠", value: "ph" },
+  { id: "ᨽ᩠", value: "bh" },
+  { id: "ᨠ᩠", value: "k" },
+  { id: "ᨣ᩠", value: "g" },
+  { id: "ᨧ᩠", value: "c" },
+  { id: "ᨩ᩠", value: "j" },
+  { id: "ᨬ᩠", value: "ñ" },
+  { id: "ᩊ᩠", value: "ḷ" },
+  { id: "ᨭ᩠", value: "ṭ" },
+  { id: "ᨯ᩠", value: "ḍ" },
+  { id: "ᨱ᩠", value: "ṇ" },
+  { id: "ᨲ᩠", value: "t" },
+  { id: "ᨴ᩠", value: "d" },
+  { id: "ᨶ᩠", value: "n" },
+  { id: "ᨷ᩠", value: "p" },
+  { id: "ᨻ᩠", value: "b" },
+  { id: "ᨾ᩠", value: "m" },
+  { id: "ᩃ᩠", value: "l" },
+  { id: "ᩈ᩠", value: "s" },
+  { id: "ᩘ", value: "ṅ" },
+
+  { id: "ᨻ᩠ᨿ", value: "bya" },
+  { id: "ᨭᩛ", value: "ṭṭha" },
+  { id: "ᩔ", value: "ssa" },
+  { id: "ᩅ᩠ᩉ", value: "vha" },
+  { id: "ᩅ᩠ᨿ", value: "vya" },
+  { id: "ᩅᩕ", value: "vra" },
+  { id: "ᨿ᩠ᩉ", value: "yha" },
+  { id: "ᨿ᩠ᨿ", value: "yya" },
+  { id: "ᨿᩕ", value: "yra" },
+  { id: "ᨿ᩠ᩅ", value: "yva" },
+  { id: "ᩉ᩠ᨿ", value: "hya" },
+  { id: "ᩉᩕ", value: "hra" },
+  { id: "ᩉ᩠ᩅ", value: "hva" },
+  { id: "ᩁ᩠ᩅ", value: "rva" },
+  { id: "ᩁ᩠ᩉ", value: "rha" },
+  { id: "ᩁ᩠ᨿ", value: "rya" },
+  { id: "ᨡ", value: "kha" },
+  { id: "ᨥ", value: "gha" },
+  { id: "ᨨ", value: "cha" },
+  { id: "ᨫ", value: "jha" },
+  { id: "ᨬ᩠ᨬ", value: "ñña" },
+  { id: "ᨮ", value: "ṭha" },
+  { id: "ᨰ", value: "ḍha" },
+  { id: "ᨳ", value: "tha" },
+  { id: "ᨵ", value: "dha" },
+  { id: "ᨹ", value: "pha" },
+  { id: "ᨽ", value: "bha" },
+  { id: "ᨠ", value: "ka" },
+  { id: "ᨣ", value: "ga" },
+  { id: "ᨧ", value: "ca" },
+  { id: "ᨩ", value: "ja" },
+  { id: "ᨬ", value: "ña" },
+  { id: "ᩊ", value: "ḷa" },
+  { id: "ᨭ", value: "ṭa" },
+  { id: "ᨯ", value: "ḍa" },
+  { id: "ᨱ", value: "ṇa" },
+  { id: "ᨲ", value: "ta" },
+  { id: "ᨴ", value: "da" },
+  { id: "ᨶ", value: "na" },
+  { id: "ᨷ", value: "pa" },
+  { id: "ᨻ", value: "ba" },
+  { id: "ᨾ", value: "ma" },
+  { id: "ᩃ", value: "la" },
+  { id: "ᩈ", value: "sa" },
+  { id: "ᩘ", value: "ṅa" },
+
+  { id: "᩠ᩉ᩠", value: "᩠h" },
+  { id: "ᩉ᩠", value: "h" },
+  { id: "ᩉ", value: "ha" },
+  { id: "᩠ᨿ", value: "᩠y" },
+  { id: "ᨿ᩠", value: "y" },
+  { id: "ᨿ", value: "ya" },
+  { id: "ᩕ᩠", value: "᩠r" },
+  { id: "ᩕ᩠", value: "᩠r" },
+  { id: "aᩕ", value: "ra" },
+  { id: "ᩕ", value: "r" },
+  { id: "ᩁ᩠", value: "r" },
+  { id: "ᩁ", value: "ra" },
+  { id: "᩠ᩅ᩠", value: "᩠v" },
+  { id: "ᩅ᩠", value: "v" },
+  { id: "ᩅ", value: "va" },
+  { id: "ᩋᩴ", value: "aṃ" },
+  { id: "ᨠ᩠ᨠᩴ", value: "iṃ" },
+  { id: "ᩏᩴ", value: "uṃ" },
+  { id: "ᩋ", value: "a" },
+  { id: "ᩋᩣ", value: "ā" },
+  { id: "ᩍ", value: "i" },
+  { id: "ᩎ", value: "ī" },
+  { id: "ᩏ", value: "u" },
+  { id: "ᩐ", value: "ū" },
+  { id: "ᩑ", value: "e" },
+  { id: "ᩒ", value: "o" },
+  { id: "e᩠ā", value: "o" },
+  { id: "a᩠", value: "" },
+  { id: "᩠a", value: "" },
+  { id: "nrd", value: "ndr" },
+  { id: "nrt", value: "ntr" },
+];
+
+const char_tai_old_to_r = [
+  { id: "ํ", value: "ฺaṃ" },
+  { id: "ิํ", value: "ฺiṃ" },
+  { id: "ุํ", value: "ฺuṃ" },
+  { id: "า", value: "ฺā" },
+  { id: "ิ", value: "ฺi" },
+  { id: "ี", value: "ฺī" },
+  { id: "ุ", value: "ฺu" },
+  { id: "ู", value: "ฺū" },
+
+  { id: "เข", value: "khe" },
+  { id: "เฃ", value: "ghe" },
+  { id: "เฉ", value: "che" },
+  { id: "เณ", value: "jhe" },
+  { id: "เฐ", value: "ṭhe" },
+  { id: "เฒ", value: "ḍhe" },
+  { id: "เถ", value: "the" },
+  { id: "เธ", value: "dhe" },
+  { id: "เผ", value: "phe" },
+  { id: "เภ", value: "bhe" },
+  { id: "โข", value: "kho" },
+  { id: "โฃ", value: "gho" },
+  { id: "โฉ", value: "cho" },
+  { id: "โณ", value: "jho" },
+  { id: "โฐ", value: "ṭho" },
+  { id: "โฒ", value: "ḍho" },
+  { id: "โถ", value: "tho" },
+  { id: "โธ", value: "dho" },
+  { id: "โผ", value: "pho" },
+  { id: "โภ", value: "bho" },
+  { id: "เก", value: "ke" },
+  { id: "เค", value: "ge" },
+  { id: "เจ", value: "ce" },
+  { id: "เช", value: "je" },
+  { id: "เญ", value: "ñe" },
+  { id: "เฬ", value: "ḷe" },
+  { id: "เฏ", value: "ṭe" },
+  { id: "เฑ", value: "ḍe" },
+  { id: "เฌ", value: "ṇe" },
+  { id: "เต", value: "te" },
+  { id: "เท", value: "de" },
+  { id: "เน", value: "ne" },
+  { id: "เบ", value: "pe" },
+  { id: "เพ", value: "be" },
+  { id: "เม", value: "me" },
+  { id: "เล", value: "le" },
+  { id: "เส", value: "se" },
+  { id: "เง", value: "ṅe" },
+  { id: "เห", value: "he" },
+  { id: "เย", value: "ye" },
+  { id: "เร", value: "re" },
+  { id: "เว", value: "ve" },
+  { id: "โก", value: "ko" },
+  { id: "โค", value: "go" },
+  { id: "โจ", value: "co" },
+  { id: "โช", value: "jo" },
+  { id: "โญ", value: "ño" },
+  { id: "โฬ", value: "ḷo" },
+  { id: "โฏ", value: "ṭo" },
+  { id: "โฑ", value: "ḍo" },
+  { id: "โฌ", value: "ṇo" },
+  { id: "โต", value: "to" },
+  { id: "โท", value: "do" },
+  { id: "โน", value: "no" },
+  { id: "โบ", value: "po" },
+  { id: "โพ", value: "bo" },
+  { id: "โม", value: "mo" },
+  { id: "โล", value: "lo" },
+  { id: "โส", value: "so" },
+  { id: "โง", value: "ṅo" },
+  { id: "โห", value: "ho" },
+  { id: "โย", value: "yo" },
+  { id: "โร", value: "ro" },
+  { id: "โว", value: "vo" },
+  { id: "ขฺ", value: "kh" },
+  { id: "ฃฺ", value: "gh" },
+  { id: "ฉฺ", value: "ch" },
+  { id: "ณฺ", value: "jh" },
+  { id: "ฐฺ", value: "ṭh" },
+  { id: "ฒฺ", value: "ḍh" },
+  { id: "ถฺ", value: "th" },
+  { id: "ธฺ", value: "dh" },
+  { id: "ผฺ", value: "ph" },
+  { id: "ภฺ", value: "bh" },
+  { id: "กฺ", value: "k" },
+  { id: "คฺ", value: "g" },
+  { id: "จฺ", value: "c" },
+  { id: "ชฺ", value: "j" },
+  { id: "ญฺ", value: "ñ" },
+  { id: "ฬฺ", value: "ḷ" },
+  { id: "ฏฺ", value: "ṭ" },
+  { id: "ฑฺ", value: "ḍ" },
+  { id: "ฌฺ", value: "ṇ" },
+  { id: "ตฺ", value: "t" },
+  { id: "ทฺ", value: "d" },
+  { id: "นฺ", value: "n" },
+  { id: "บฺ", value: "p" },
+  { id: "พฺ", value: "b" },
+  { id: "มฺ", value: "m" },
+  { id: "ลฺ", value: "l" },
+  { id: "สฺ", value: "s" },
+  { id: "งฺ", value: "ṅ" },
+  { id: "หฺ", value: "h" },
+  { id: "ยฺ", value: "y" },
+  { id: "รฺ", value: "r" },
+  { id: "วฺ", value: "v" },
+
+  { id: "ข", value: "kha" },
+  { id: "ฃ", value: "gha" },
+  { id: "ฉ", value: "cha" },
+  { id: "ณ", value: "jha" },
+  { id: "ฐ", value: "ṭha" },
+  { id: "ฒ", value: "ḍha" },
+  { id: "ถ", value: "tha" },
+  { id: "ธ", value: "dha" },
+  { id: "ผ", value: "pha" },
+  { id: "ภ", value: "bha" },
+  { id: "ก", value: "ka" },
+  { id: "ค", value: "ga" },
+  { id: "จ", value: "ca" },
+  { id: "ช", value: "ja" },
+  { id: "ญ", value: "ña" },
+  { id: "ฬ", value: "ḷa" },
+  { id: "ฏ", value: "ṭa" },
+  { id: "ฑ", value: "ḍa" },
+  { id: "ฌ", value: "ṇa" },
+  { id: "ต", value: "ta" },
+  { id: "ท", value: "da" },
+  { id: "น", value: "na" },
+  { id: "บ", value: "pa" },
+  { id: "พ", value: "ba" },
+  { id: "ม", value: "ma" },
+  { id: "ล", value: "la" },
+  { id: "ส", value: "sa" },
+  { id: "ง", value: "ṅa" },
+  { id: "ห", value: "ha" },
+  { id: "ย", value: "ya" },
+  { id: "ร", value: "ra" },
+  { id: "ว", value: "va" },
+
+  { id: "อํ", value: "aṃ" },
+  { id: "อิํ", value: "iṃ" },
+  { id: "อุํ", value: "uṃ" },
+  { id: "อ", value: "a" },
+  { id: "อา", value: "ā" },
+  { id: "อิ", value: "i" },
+  { id: "อี", value: "ī" },
+  { id: "อุ", value: "u" },
+  { id: "อู", value: "ū" },
+  { id: "เอ", value: "e" },
+  { id: "โอ", value: "o" },
+  { id: "eฺā", value: "o" },
+  { id: "aฺ", value: "" },
+];
+*/
+export const roman_to_taitham = (input: string | null): string | null => {
+  if (input === null) {
+    return input;
+  }
+  let txt = input.toLowerCase();
+
+  try {
+    for (const iterator of char_roman_to_tai) {
+      txt = txt.replaceAll(iterator.id, iterator.value);
+    }
+  } catch (err) {
+    //error
+    console.error(err);
+  }
+  return txt;
+};

+ 135 - 0
dashboard/src/components/code/thai.ts

@@ -0,0 +1,135 @@
+const char_roman_to_thai = [
+  { id: "khe", value: "เข" },
+  { id: "ghe", value: "เฃ" },
+  { id: "che", value: "เฉ" },
+  { id: "jhe", value: "เณ" },
+  { id: "ṭhe", value: "เฐ" },
+  { id: "ḍhe", value: "เฒ" },
+  { id: "the", value: "เถ" },
+  { id: "dhe", value: "เธ" },
+  { id: "phe", value: "เผ" },
+  { id: "bhe", value: "เภ" },
+  { id: "kho", value: "โข" },
+  { id: "gho", value: "โฃ" },
+  { id: "cho", value: "โฉ" },
+  { id: "jho", value: "โณ" },
+  { id: "ṭho", value: "โฐ" },
+  { id: "ḍho", value: "โฒ" },
+  { id: "tho", value: "โถ" },
+  { id: "dho", value: "โธ" },
+  { id: "pho", value: "โผ" },
+  { id: "bho", value: "โภ" },
+  { id: "ke", value: "เก" },
+  { id: "ge", value: "เค" },
+  { id: "ce", value: "เจ" },
+  { id: "je", value: "เช" },
+  { id: "ñe", value: "เญ" },
+  { id: "ḷe", value: "เฬ" },
+  { id: "ṭe", value: "เฏ" },
+  { id: "ḍe", value: "เฑ" },
+  { id: "ṇe", value: "เฌ" },
+  { id: "te", value: "เต" },
+  { id: "de", value: "เท" },
+  { id: "ne", value: "เน" },
+  { id: "pe", value: "เป" },
+  { id: "be", value: "เพ" },
+  { id: "me", value: "เม" },
+  { id: "le", value: "เล" },
+  { id: "se", value: "เส" },
+  { id: "ṅe", value: "เง" },
+  { id: "he", value: "เห" },
+  { id: "ye", value: "เย" },
+  { id: "re", value: "เร" },
+  { id: "ve", value: "เว" },
+  { id: "ko", value: "โก" },
+  { id: "go", value: "โค" },
+  { id: "co", value: "โจ" },
+  { id: "jo", value: "โช" },
+  { id: "ño", value: "โญ" },
+  { id: "ḷo", value: "โฬ" },
+  { id: "ṭo", value: "โฏ" },
+  { id: "ḍo", value: "โฑ" },
+  { id: "ṇo", value: "โฌ" },
+  { id: "to", value: "โต" },
+  { id: "do", value: "โท" },
+  { id: "no", value: "โน" },
+  { id: "po", value: "โป" },
+  { id: "bo", value: "โพ" },
+  { id: "mo", value: "โม" },
+  { id: "lo", value: "โล" },
+  { id: "so", value: "โส" },
+  { id: "ṅo", value: "โง" },
+  { id: "ho", value: "โห" },
+  { id: "yo", value: "โย" },
+  { id: "ro", value: "โร" },
+  { id: "vo", value: "โว" },
+  { id: "kh", value: "ขฺ" },
+  { id: "gh", value: "ฃฺ" },
+  { id: "ch", value: "ฉฺ" },
+  { id: "jh", value: "ณฺ" },
+  { id: "ṭh", value: "ฐฺ" },
+  { id: "ḍh", value: "ฒฺ" },
+  { id: "th", value: "ถฺ" },
+  { id: "dh", value: "ธฺ" },
+  { id: "ph", value: "ผฺ" },
+  { id: "bh", value: "ภฺ" },
+  { id: "k", value: "กฺ" },
+  { id: "g", value: "คฺ" },
+  { id: "c", value: "จฺ" },
+  { id: "j", value: "ชฺ" },
+  { id: "ñ", value: "ญฺ" },
+  { id: "ḷ", value: "ฬฺ" },
+  { id: "ṭ", value: "ฏฺ" },
+  { id: "ḍ", value: "ฑฺ" },
+  { id: "ṇ", value: "ฌฺ" },
+  { id: "t", value: "ตฺ" },
+  { id: "d", value: "ทฺ" },
+  { id: "n", value: "นฺ" },
+  { id: "p", value: "ปฺ" },
+  { id: "b", value: "พฺ" },
+  { id: "m", value: "มฺ" },
+  { id: "l", value: "ลฺ" },
+  { id: "s", value: "สฺ" },
+  { id: "ṅ", value: "งฺ" },
+  { id: "h", value: "หฺ" },
+  { id: "y", value: "ยฺ" },
+  { id: "r", value: "รฺ" },
+  { id: "v", value: "วฺ" },
+  { id: "ฺaṃ", value: "ํ" },
+  { id: "ฺiṃ", value: "ิํ" },
+  { id: "ฺuṃ", value: "ุํ" },
+  { id: "ฺā", value: "า" },
+  { id: "ฺi", value: "ิ" },
+  { id: "ฺī", value: "ี" },
+  { id: "ฺu", value: "ุ" },
+  { id: "ฺū", value: "ู" },
+  { id: "aṃ", value: "อํ" },
+  { id: "iṃ", value: "อิํ" },
+  { id: "uṃ", value: "อุํ" },
+  { id: "a", value: "อ" },
+  { id: "ā", value: "อา" },
+  { id: "i", value: "อิ" },
+  { id: "ī", value: "อี" },
+  { id: "u", value: "อุ" },
+  { id: "ū", value: "อู" },
+  { id: "e", value: "เอ" },
+  { id: "o", value: "โอ" },
+  { id: "ฺอ", value: "" },
+];
+
+export const roman_to_thai = (input: string | null): string | null => {
+  if (input === null) {
+    return input;
+  }
+  let txt = input.toLowerCase();
+
+  try {
+    for (const iterator of char_roman_to_thai) {
+      txt = txt.replaceAll(iterator.id, iterator.value);
+    }
+  } catch (err) {
+    //error
+    console.error(err);
+  }
+  return txt;
+};

+ 6 - 3
dashboard/src/components/template/MdView.tsx

@@ -1,10 +1,13 @@
-import { XmlToReact } from "./utilities";
+import { TCodeConvertor, XmlToReact } from "./utilities";
 
 
 interface IWidget {
 interface IWidget {
   html: string;
   html: string;
+  wordWidget?: boolean;
+  convertor?: TCodeConvertor;
 }
 }
-const Widget = ({ html }: IWidget) => {
-  const jsx = XmlToReact(html);
+const Widget = ({ html, wordWidget = false, convertor }: IWidget) => {
+  console.log("word", wordWidget);
+  const jsx = XmlToReact(html, wordWidget, convertor);
   return <>{jsx}</>;
   return <>{jsx}</>;
 };
 };
 
 

+ 6 - 2
dashboard/src/components/template/SentEdit/SentCell.tsx

@@ -12,8 +12,9 @@ const { Text } = Typography;
 
 
 interface ISentCell {
 interface ISentCell {
   data: ISentence;
   data: ISentence;
+  wordWidget?: boolean;
 }
 }
-const Widget = ({ data }: ISentCell) => {
+const Widget = ({ data, wordWidget = false }: ISentCell) => {
   const [isEditMode, setIsEditMode] = useState(false);
   const [isEditMode, setIsEditMode] = useState(false);
   const [sentData, setSentData] = useState<ISentence>(data);
   const [sentData, setSentData] = useState<ISentence>(data);
   return (
   return (
@@ -25,7 +26,10 @@ const Widget = ({ data }: ISentCell) => {
       }}
       }}
     >
     >
       <div style={{ display: isEditMode ? "none" : "block" }}>
       <div style={{ display: isEditMode ? "none" : "block" }}>
-        <MdView html={sentData.html !== "" ? sentData.html : "请输入"} />
+        <MdView
+          html={sentData.html !== "" ? sentData.html : "请输入"}
+          wordWidget={wordWidget}
+        />
       </div>
       </div>
       <div style={{ display: isEditMode ? "block" : "none" }}>
       <div style={{ display: isEditMode ? "block" : "none" }}>
         <SentCellEditable
         <SentCellEditable

+ 20 - 20
dashboard/src/components/template/SentEdit/SentContent.tsx

@@ -1,29 +1,29 @@
 import { ISentence } from "../SentEdit";
 import { ISentence } from "../SentEdit";
 import SentCell from "./SentCell";
 import SentCell from "./SentCell";
 interface IWidgetSentContent {
 interface IWidgetSentContent {
-	origin?: ISentence[];
-	translation?: ISentence[];
-	layout?: "row" | "column";
+  origin?: ISentence[];
+  translation?: ISentence[];
+  layout?: "row" | "column";
 }
 }
 const Widget = ({
 const Widget = ({
-	origin,
-	translation,
-	layout = "column",
+  origin,
+  translation,
+  layout = "column",
 }: IWidgetSentContent) => {
 }: IWidgetSentContent) => {
-	return (
-		<div style={{ display: "flex", flexDirection: layout }}>
-			<div style={{ flex: "5", color: "#9f3a01" }}>
-				{origin?.map((item, id) => {
-					return <SentCell key={id} data={item} />;
-				})}
-			</div>
-			<div style={{ flex: "5" }}>
-				{translation?.map((item, id) => {
-					return <SentCell key={id} data={item} />;
-				})}
-			</div>
-		</div>
-	);
+  return (
+    <div style={{ display: "flex", flexDirection: layout }}>
+      <div style={{ flex: "5", color: "#9f3a01" }}>
+        {origin?.map((item, id) => {
+          return <SentCell key={id} data={item} wordWidget={true} />;
+        })}
+      </div>
+      <div style={{ flex: "5" }}>
+        {translation?.map((item, id) => {
+          return <SentCell key={id} data={item} />;
+        })}
+      </div>
+    </div>
+  );
 };
 };
 
 
 export default Widget;
 export default Widget;

+ 23 - 4
dashboard/src/components/template/SentRead.tsx

@@ -1,9 +1,15 @@
+import { useEffect, useRef, useState } from "react";
 import { Tooltip, Button } from "antd";
 import { Tooltip, Button } from "antd";
 import MdView from "./MdView";
 import MdView from "./MdView";
 import { ISentence } from "./SentEdit";
 import { ISentence } from "./SentEdit";
 import { useAppSelector } from "../../hooks";
 import { useAppSelector } from "../../hooks";
-import { onChangeKey, onChangeValue } from "../../reducers/setting";
-import { useEffect, useRef } from "react";
+import {
+  onChangeKey,
+  onChangeValue,
+  settingInfo,
+} from "../../reducers/setting";
+import { GetUserSetting } from "../auth/setting/default";
+import { TCodeConvertor } from "./utilities";
 
 
 interface IWidgetSentReadFrame {
 interface IWidgetSentReadFrame {
   origin?: ISentence[];
   origin?: ISentence[];
@@ -17,8 +23,10 @@ const SentReadFrame = ({
   layout = "column",
   layout = "column",
   sentId,
   sentId,
 }: IWidgetSentReadFrame) => {
 }: IWidgetSentReadFrame) => {
+  const [paliCode1, setPaliCode1] = useState<TCodeConvertor>("roman");
   const key = useAppSelector(onChangeKey);
   const key = useAppSelector(onChangeKey);
   const value = useAppSelector(onChangeValue);
   const value = useAppSelector(onChangeValue);
+  const settings = useAppSelector(settingInfo);
   const boxOrg = useRef<HTMLDivElement>(null);
   const boxOrg = useRef<HTMLDivElement>(null);
   const boxSent = useRef<HTMLDivElement>(null);
   const boxSent = useRef<HTMLDivElement>(null);
 
 
@@ -43,7 +51,11 @@ const SentReadFrame = ({
       default:
       default:
         break;
         break;
     }
     }
-  }, [key, value]);
+    const _paliCode1 = GetUserSetting("setting.pali.script1", settings);
+    if (typeof _paliCode1 !== "undefined") {
+      setPaliCode1(_paliCode1.toString() as TCodeConvertor);
+    }
+  }, [key, value, settings]);
   return (
   return (
     <Tooltip
     <Tooltip
       placement="topLeft"
       placement="topLeft"
@@ -57,7 +69,14 @@ const SentReadFrame = ({
       <div style={{ display: "flex", flexDirection: layout }} ref={boxSent}>
       <div style={{ display: "flex", flexDirection: layout }} ref={boxSent}>
         <div style={{ flex: "5", color: "#9f3a01" }} ref={boxOrg}>
         <div style={{ flex: "5", color: "#9f3a01" }} ref={boxOrg}>
           {origin?.map((item, id) => {
           {origin?.map((item, id) => {
-            return <MdView key={id} html={item.html} />;
+            return (
+              <MdView
+                key={id}
+                html={item.html}
+                wordWidget={true}
+                convertor={paliCode1}
+              />
+            );
           })}
           })}
         </div>
         </div>
         <div style={{ flex: "5" }}>
         <div style={{ flex: "5" }}>

+ 17 - 7
dashboard/src/components/template/Term.tsx

@@ -2,7 +2,9 @@ import { ProCard } from "@ant-design/pro-components";
 import { Button, Popover } from "antd";
 import { Button, Popover } from "antd";
 import { SearchOutlined } from "@ant-design/icons";
 import { SearchOutlined } from "@ant-design/icons";
 import { Typography } from "antd";
 import { Typography } from "antd";
-import TermCreate from "../studio/term/TermCreate";
+import TermCreate, { IWidgetDictCreate } from "../studio/term/TermCreate";
+import { command } from "../../reducers/command";
+import store from "../../store";
 
 
 const { Text, Link } = Typography;
 const { Text, Link } = Typography;
 
 
@@ -24,12 +26,20 @@ const TermCtl = ({ id, word, meaning, meaning2, channel }: IWidgetTermCtl) => {
     textShow = <Link>{show}</Link>;
     textShow = <Link>{show}</Link>;
   }
   }
   const editButton = (
   const editButton = (
-    <TermCreate
-      isCreate={id ? false : true}
-      word={word}
-      studio=""
-      wordId={id ? id : undefined}
-    />
+    <Button
+      onClick={() => {
+        const it: IWidgetDictCreate = {
+          studio: "string",
+          isCreate: true,
+          word: word,
+          channel: channel,
+          type: "inline",
+        };
+        store.dispatch(command({ prop: it, type: "term" }));
+      }}
+    >
+      新建
+    </Button>
   );
   );
   const userCard = (
   const userCard = (
     <>
     <>

+ 69 - 9
dashboard/src/components/template/utilities.ts

@@ -1,8 +1,24 @@
 import React from "react";
 import React from "react";
 import MdTpl from "./MdTpl";
 import MdTpl from "./MdTpl";
+import { WdCtl } from "./Wd";
 import { Divider } from "antd";
 import { Divider } from "antd";
-
-export function XmlToReact(text: string): React.ReactNode[] {
+import { roman_to_my, my_to_roman } from "../code/my";
+import { roman_to_si } from "../code/si";
+import { roman_to_thai } from "../code/thai";
+import { roman_to_taitham } from "../code/tai-tham";
+export type TCodeConvertor =
+  | "none"
+  | "roman"
+  | "roman_to_my"
+  | "my_to_roman"
+  | "roman_to_thai"
+  | "roman_to_taitham"
+  | "roman_to_si";
+export function XmlToReact(
+  text: string,
+  wordWidget: boolean = false,
+  convertor?: TCodeConvertor
+): React.ReactNode[] {
   //console.log("html string:", text);
   //console.log("html string:", text);
   const parser = new DOMParser();
   const parser = new DOMParser();
   const xmlDoc = parser.parseFromString(
   const xmlDoc = parser.parseFromString(
@@ -10,7 +26,7 @@ export function XmlToReact(text: string): React.ReactNode[] {
     "text/xml"
     "text/xml"
   );
   );
   const x = xmlDoc.documentElement.childNodes;
   const x = xmlDoc.documentElement.childNodes;
-  return convert(x[0]);
+  return convert(x[0], wordWidget, convertor);
 
 
   function getAttr(node: ChildNode, key: number): Object {
   function getAttr(node: ChildNode, key: number): Object {
     const ele = node as Element;
     const ele = node as Element;
@@ -25,9 +41,13 @@ export function XmlToReact(text: string): React.ReactNode[] {
     return output;
     return output;
   }
   }
 
 
-  function convert(node: ChildNode): React.ReactNode[] {
+  function convert(
+    node: ChildNode,
+    wordWidget: boolean = false,
+    convertor?: TCodeConvertor
+  ): React.ReactNode[] {
     let output: React.ReactNode[] = [];
     let output: React.ReactNode[] = [];
-
+    console.log("wordWidget", wordWidget);
     for (let i = 0; i < node.childNodes.length; i++) {
     for (let i = 0; i < node.childNodes.length; i++) {
       const value = node.childNodes[i];
       const value = node.childNodes[i];
       //console.log(value.nodeName, value.nodeType, value.nodeValue);
       //console.log(value.nodeName, value.nodeType, value.nodeValue);
@@ -37,12 +57,20 @@ export function XmlToReact(text: string): React.ReactNode[] {
           switch (value.nodeName) {
           switch (value.nodeName) {
             case "MdTpl":
             case "MdTpl":
               output.push(
               output.push(
-                React.createElement(MdTpl, getAttr(value, i), convert(value))
+                React.createElement(
+                  MdTpl,
+                  getAttr(value, i),
+                  convert(value, wordWidget, convertor)
+                )
               );
               );
               break;
               break;
             case "hr":
             case "hr":
               output.push(
               output.push(
-                React.createElement(Divider, getAttr(value, i), convert(value))
+                React.createElement(
+                  Divider,
+                  getAttr(value, i),
+                  convert(value, wordWidget, convertor)
+                )
               );
               );
               break;
               break;
             default:
             default:
@@ -50,7 +78,7 @@ export function XmlToReact(text: string): React.ReactNode[] {
                 React.createElement(
                 React.createElement(
                   value.nodeName,
                   value.nodeName,
                   getAttr(value, i),
                   getAttr(value, i),
-                  convert(value)
+                  convert(value, wordWidget, convertor)
                 )
                 )
               );
               );
               break;
               break;
@@ -60,7 +88,39 @@ export function XmlToReact(text: string): React.ReactNode[] {
         case 2: //attribute node
         case 2: //attribute node
           return [];
           return [];
         case 3: //text node
         case 3: //text node
-          output.push(value.nodeValue);
+          let textValue = value.nodeValue;
+          //编码转换
+          if (typeof convertor !== "undefined") {
+            switch (convertor) {
+              case "roman_to_my":
+                textValue = roman_to_my(textValue);
+                break;
+              case "my_to_roman":
+                textValue = my_to_roman(textValue);
+                break;
+              case "roman_to_si":
+                textValue = roman_to_si(textValue);
+                break;
+              case "roman_to_thai":
+                textValue = roman_to_thai(textValue);
+                break;
+              case "roman_to_taitham":
+                textValue = roman_to_taitham(textValue);
+                break;
+            }
+          }
+          if (wordWidget) {
+            //将单词按照空格拆开。用组件包裹
+            const wordList = textValue?.split(" ");
+            const wordWidget = wordList?.map((word, id) => {
+              const prop: any = { key: id, text: word };
+              return React.createElement(WdCtl, prop);
+            });
+            output.push(wordWidget);
+          } else {
+            output.push(textValue);
+          }
+
           break;
           break;
         case 8:
         case 8:
           return [];
           return [];

+ 2 - 0
dashboard/src/locales/zh-Hans/setting/index.ts

@@ -16,6 +16,8 @@ const items = {
   "setting.pali.script.rome.label": "罗马巴利",
   "setting.pali.script.rome.label": "罗马巴利",
   "setting.pali.script.my.label": "缅文字母",
   "setting.pali.script.my.label": "缅文字母",
   "setting.pali.script.si.label": "新哈拉字母",
   "setting.pali.script.si.label": "新哈拉字母",
+  "setting.pali.script.thai.label": "泰文字母",
+  "setting.pali.script.tai.label": "傣仂文字母",
   "setting.pali.script.none.label": "不显示",
   "setting.pali.script.none.label": "不显示",
 };
 };