diff --git a/Cargo.lock b/Cargo.lock
index 1d286e0..4026e7f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
dependencies = [
"getrandom",
"once_cell",
@@ -30,9 +30,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "1.1.1"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
@@ -66,18 +66,18 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
name = "async-trait"
-version = "0.1.73"
+version = "0.1.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -89,7 +89,7 @@ dependencies = [
"attribute-derive-macro",
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -105,7 +105,7 @@ dependencies = [
"proc-macro2",
"quote",
"quote-use",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -131,9 +131,9 @@ dependencies = [
[[package]]
name = "base64"
-version = "0.21.4"
+version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
[[package]]
name = "bitflags"
@@ -258,9 +258,9 @@ checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271"
[[package]]
name = "config"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
+checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca"
dependencies = [
"async-trait",
"lazy_static",
@@ -292,18 +292,18 @@ dependencies = [
[[package]]
name = "const_format"
-version = "0.2.31"
+version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48"
+checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
dependencies = [
"const_format_proc_macros",
]
[[package]]
name = "const_format_proc_macros"
-version = "0.2.31"
+version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6"
+checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
dependencies = [
"proc-macro2",
"quote",
@@ -319,11 +319,21 @@ dependencies = [
"unicode-segmentation",
]
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]]
name = "derive-where"
@@ -333,7 +343,7 @@ checksum = "146398d62142a0f35248a608f17edf0dde57338354966d6e41d0eb2d16980ccb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -371,9 +381,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -386,9 +396,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
name = "futures"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
dependencies = [
"futures-channel",
"futures-core",
@@ -401,9 +411,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
dependencies = [
"futures-core",
"futures-sink",
@@ -411,15 +421,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
[[package]]
name = "futures-executor"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
dependencies = [
"futures-core",
"futures-task",
@@ -428,38 +438,38 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
[[package]]
name = "futures-macro"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
name = "futures-sink"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
dependencies = [
"futures-channel",
"futures-core",
@@ -475,9 +485,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"js-sys",
@@ -488,9 +498,9 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.28.0"
+version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "gloo-net"
@@ -527,9 +537,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.21"
+version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
dependencies = [
"bytes",
"fnv",
@@ -537,7 +547,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
- "indexmap 1.9.3",
+ "indexmap",
"slab",
"tokio",
"tokio-util",
@@ -561,9 +571,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.14.0"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
[[package]]
name = "html-escape"
@@ -576,9 +586,9 @@ dependencies = [
[[package]]
name = "http"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
dependencies = [
"bytes",
"fnv",
@@ -625,7 +635,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tokio",
"tower-service",
"tracing",
@@ -657,9 +667,9 @@ dependencies = [
[[package]]
name = "idna"
-version = "0.4.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@@ -667,22 +677,12 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "1.9.3"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad227c3af19d4914570ad36d30409928b75967c298feb9ea1969db3a610bb14e"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [
"equivalent",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.3",
]
[[package]]
@@ -693,15 +693,15 @@ checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8"
[[package]]
name = "inventory"
-version = "0.3.12"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1be380c410bf0595e94992a648ea89db4dd3f3354ba54af206fd2a68cf5ac8e"
+checksum = "0508c56cfe9bfd5dfeb0c22ab9a6abfda2f27bdca422132e494266351ed8d83c"
[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "itertools"
@@ -721,6 +721,15 @@ dependencies = [
"either",
]
+[[package]]
+name = "itertools"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+dependencies = [
+ "either",
+]
+
[[package]]
name = "itoa"
version = "1.0.9"
@@ -729,9 +738,9 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
dependencies = [
"wasm-bindgen",
]
@@ -744,9 +753,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "leptos"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e21fa20494987b6c5522a150c4075770fda9085c1ba714856015530e63b7180e"
+checksum = "9d02b78d6e38acf8199426058a0d8c4030835d84a4ee16147df25be7fed707e0"
dependencies = [
"cfg-if",
"leptos_config",
@@ -791,9 +800,9 @@ dependencies = [
[[package]]
name = "leptos_config"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22604a419f1c6eb8fb0e2ab3563b23a53500f942b09cbeddc5bfa8f223bf839a"
+checksum = "afcaa5db5b22b794b624e14ffe2aefae215b2d21c60a230ae2d06fe21ae5da64"
dependencies = [
"config",
"regex",
@@ -804,9 +813,9 @@ dependencies = [
[[package]]
name = "leptos_dom"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a89ef6c9802c3f3b94286c88b0c18299bad87f9ce8559a6b8e8f64bd70d4df8f"
+checksum = "af459b63567e8e9c921ecbe7863732dc8dcb7874eaad6826b7d3778a53ec0ea6"
dependencies = [
"async-recursion",
"cfg-if",
@@ -814,7 +823,7 @@ dependencies = [
"futures",
"getrandom",
"html-escape",
- "indexmap 2.0.1",
+ "indexmap",
"itertools 0.10.5",
"js-sys",
"leptos_reactive",
@@ -834,27 +843,27 @@ dependencies = [
[[package]]
name = "leptos_hot_reload"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fce5cdf38f701bed1ea8ce7f09840a1d8d18ad2401a74bed1b67c1a729005a82"
+checksum = "4ea60376eb80a24b3ab082612d62211e3ea0fc4dee132f7ff34d5fa5a5108cd2"
dependencies = [
"anyhow",
"camino",
- "indexmap 2.0.1",
+ "indexmap",
"parking_lot",
"proc-macro2",
"quote",
"rstml",
"serde",
- "syn 2.0.37",
+ "syn 2.0.39",
"walkdir",
]
[[package]]
name = "leptos_macro"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26347fd31cea6d93f7facdae0d9abfc302ee2f6f1df75132831b85d26b8192ad"
+checksum = "a7e96f4c450f4b5e2ccb135c2b1328890f911ca4ee89da9ed6d582df929e6cb5"
dependencies = [
"attribute-derive",
"cfg-if",
@@ -868,19 +877,19 @@ dependencies = [
"quote",
"rstml",
"server_fn_macro",
- "syn 2.0.37",
+ "syn 2.0.39",
"tracing",
"uuid",
]
[[package]]
name = "leptos_meta"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78fe4e0adc619bbe0e318778a67125f23db34819d4875b4dd3aa053fa4317e17"
+checksum = "983bbf829598d275b01e96bd9fca71e4739dd7b9fdf69cb8898b30ebfb124332"
dependencies = [
"cfg-if",
- "indexmap 2.0.1",
+ "indexmap",
"leptos",
"tracing",
"wasm-bindgen",
@@ -889,14 +898,14 @@ dependencies = [
[[package]]
name = "leptos_reactive"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3eb42529421c5777d2045e2e6b5809fc1f568eeacc2e4f88cc8d7b24651842a7"
+checksum = "22207568e096ac153ba8da68635e3136c1ec614ea9012736fa861c05bfb2eeff"
dependencies = [
"base64",
"cfg-if",
"futures",
- "indexmap 2.0.1",
+ "indexmap",
"js-sys",
"paste",
"pin-project",
@@ -916,9 +925,9 @@ dependencies = [
[[package]]
name = "leptos_router"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8e11250af4ce7f0c4e3d33789fc876ffad66fb9f791048229040072f40365f9"
+checksum = "c1a2ff8b8e8ae8b17efd8be2a407f7f83ed57c5243f70f2d03e6635f9ff61848"
dependencies = [
"cfg-if",
"gloo-net",
@@ -941,9 +950,9 @@ dependencies = [
[[package]]
name = "leptos_server"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38a65659b37d296ce80518c84168cb62057256bb99a85669304a8025b48cbced"
+checksum = "272d018a5adf33d10ee57e6f0f83dccc305c68613cd207e8a653aeebd4cd5b4f"
dependencies = [
"inventory",
"lazy_static",
@@ -957,9 +966,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.148"
+version = "0.2.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
[[package]]
name = "linear-map"
@@ -973,9 +982,9 @@ dependencies = [
[[package]]
name = "lock_api"
-version = "0.4.10"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
dependencies = [
"autocfg",
"scopeguard",
@@ -996,7 +1005,7 @@ dependencies = [
"manyhow-macros",
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1012,9 +1021,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.6.3"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "mime"
@@ -1039,9 +1048,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
dependencies = [
"libc",
"wasi",
@@ -1100,9 +1109,9 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.8"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
dependencies = [
"cfg-if",
"libc",
@@ -1125,9 +1134,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]]
name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pin-project"
@@ -1146,7 +1155,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1168,7 +1177,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
dependencies = [
"proc-macro2",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1207,9 +1216,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.67"
+version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
dependencies = [
"unicode-ident",
]
@@ -1222,7 +1231,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
"version_check",
"yansi",
]
@@ -1264,7 +1273,7 @@ checksum = "a7b5abe3fe82fdeeb93f44d66a7b444dedf2e4827defb0a8e69c437b2de2ef94"
dependencies = [
"quote",
"quote-use-macros",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1276,7 +1285,7 @@ dependencies = [
"derive-where",
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1287,9 +1296,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
[[package]]
name = "redox_syscall"
-version = "0.3.5"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
"bitflags",
]
@@ -1334,9 +1343,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.11.20"
+version = "0.11.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
"base64",
"bytes",
@@ -1357,6 +1366,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
+ "system-configuration",
"tokio",
"tower-service",
"url",
@@ -1403,7 +1413,7 @@ dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
"syn_derive",
"thiserror",
]
@@ -1449,15 +1459,15 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
[[package]]
name = "self_cell"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6"
+checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
[[package]]
name = "serde"
-version = "1.0.188"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
dependencies = [
"serde_derive",
]
@@ -1475,20 +1485,20 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.188"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
name = "serde_json"
-version = "1.0.107"
+version = "1.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
dependencies = [
"itoa",
"ryu",
@@ -1529,9 +1539,9 @@ dependencies = [
[[package]]
name = "server_fn"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91803d0fe7d4edae5c8a01d18201a301c39b5743859916f62813f1ce3cdd9963"
+checksum = "cfed18dfcc8d9004579c40482c3419c07f60ffb9c5b250542edca99f508b0ce9"
dependencies = [
"ciborium",
"const_format",
@@ -1546,34 +1556,34 @@ dependencies = [
"serde_json",
"serde_qs",
"server_fn_macro_default",
- "syn 2.0.37",
+ "syn 2.0.39",
"thiserror",
"xxhash-rust",
]
[[package]]
name = "server_fn_macro"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d48924ee63629b7bd3a40e54d860e85409fbc6309d9976f56aa09ff3e0ee814"
+checksum = "0b70ae8e22546ba85500391b36c08e3fba64871be8a26557a3663a8e08acb56f"
dependencies = [
"const_format",
"proc-macro-error",
"proc-macro2",
"quote",
"serde",
- "syn 2.0.37",
+ "syn 2.0.39",
"xxhash-rust",
]
[[package]]
name = "server_fn_macro_default"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87efab27df8d2a86033c07c937c83d9ad9ef71b915d2a91eba1566814ffc0e87"
+checksum = "7256ba61dfadb220598db418376e7bc2a34b96df36c4dc48f24ffe161810fc0b"
dependencies = [
"server_fn_macro",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1593,9 +1603,9 @@ dependencies = [
[[package]]
name = "slotmap"
-version = "1.0.6"
+version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
dependencies = [
"serde",
"version_check",
@@ -1603,15 +1613,15 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.11.1"
+version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi",
@@ -1619,9 +1629,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
"windows-sys",
@@ -1640,9 +1650,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.37"
+version = "2.0.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
dependencies = [
"proc-macro2",
"quote",
@@ -1651,14 +1661,35 @@ dependencies = [
[[package]]
name = "syn_derive"
-version = "0.1.7"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae6eef0000c4a12ecdfd7873ea84a8b5aab5e44db72e38e07b028a25386f29a5"
+checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
]
[[package]]
@@ -1669,22 +1700,22 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "thiserror"
-version = "1.0.49"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.49"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1704,24 +1735,24 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.32.0"
+version = "1.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
"pin-project-lite",
- "socket2 0.5.4",
+ "socket2 0.5.5",
"windows-sys",
]
[[package]]
name = "tokio-util"
-version = "0.7.9"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
"bytes",
"futures-core",
@@ -1748,11 +1779,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
- "cfg-if",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -1760,20 +1790,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
]
@@ -1801,7 +1831,7 @@ checksum = "982ee4197351b5c9782847ef5ec1fdcaf50503fb19d68f9771adae314e72b492"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
]
[[package]]
@@ -1839,9 +1869,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "url"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
"idna",
@@ -1850,15 +1880,15 @@ dependencies = [
[[package]]
name = "utf8-width"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
[[package]]
name = "uuid"
-version = "1.4.1"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
dependencies = [
"getrandom",
]
@@ -1882,11 +1912,11 @@ dependencies = [
[[package]]
name = "wana_kana"
version = "3.0.0"
+source = "git+https://github.com/GlooriousWalrus/wana_kana_rust#19c12c3455c6bc25701c53f82c6eb00d61b61308"
dependencies = [
"fnv",
- "itertools 0.10.5",
+ "itertools 0.12.0",
"lazy_static",
- "regex",
]
[[package]]
@@ -1906,9 +1936,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -1916,24 +1946,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.37"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
dependencies = [
"cfg-if",
"js-sys",
@@ -1943,9 +1973,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1953,28 +1983,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.37",
+ "syn 2.0.39",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
[[package]]
name = "web-sys"
-version = "0.3.64"
+version = "0.3.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
dependencies = [
"js-sys",
"wasm-bindgen",
diff --git a/Cargo.toml b/Cargo.toml
index d3f14a8..0705467 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
[workspace]
resolver = "2"
edition = "2021"
-members = ["crates/leptos-tw-ui", "site", "wana_kana_rust"]
+members = ["crates/leptos-tw-ui", "site"]
# exclude = ["site"]
[workspace.package]
diff --git a/site/Cargo.lock b/site/Cargo.lock
deleted file mode 100644
index cf06b60..0000000
--- a/site/Cargo.lock
+++ /dev/null
@@ -1,2227 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "addr2line"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "ahash"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "aho-corasick"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.75"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
-
-[[package]]
-name = "async-recursion"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "async-trait"
-version = "0.1.73"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "attribute-derive"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c124f12ade4e670107b132722d0ad1a5c9790bcbc1b265336369ea05626b4498"
-dependencies = [
- "attribute-derive-macro",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "attribute-derive-macro"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b217a07446e0fb086f83401a98297e2d81492122f5874db5391bd270a185f88"
-dependencies = [
- "collection_literals",
- "interpolator",
- "proc-macro-error",
- "proc-macro-utils",
- "proc-macro2",
- "quote",
- "quote-use",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "backtrace"
-version = "0.3.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
-dependencies = [
- "addr2line",
- "cc",
- "cfg-if",
- "libc",
- "miniz_oxide",
- "object",
- "rustc-demangle",
-]
-
-[[package]]
-name = "base64"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-
-[[package]]
-name = "base64"
-version = "0.21.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "bitvec"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
-dependencies = [
- "funty",
- "radium",
- "tap",
- "wyz",
-]
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
-
-[[package]]
-name = "bytecheck"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
-dependencies = [
- "bytecheck_derive",
- "ptr_meta",
- "simdutf8",
- "uuid",
-]
-
-[[package]]
-name = "bytecheck_derive"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "bytes"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
-
-[[package]]
-name = "camino"
-version = "1.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
-
-[[package]]
-name = "cc"
-version = "1.0.83"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "ciborium"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
-dependencies = [
- "ciborium-io",
- "ciborium-ll",
- "serde",
-]
-
-[[package]]
-name = "ciborium-io"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
-
-[[package]]
-name = "ciborium-ll"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
-dependencies = [
- "ciborium-io",
- "half",
-]
-
-[[package]]
-name = "collection_literals"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271"
-
-[[package]]
-name = "common_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3f6d59c71e7dc3af60f0af9db32364d96a16e9310f3f5db2b55ed642162dd35"
-
-[[package]]
-name = "config"
-version = "0.13.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
-dependencies = [
- "async-trait",
- "json5",
- "lazy_static",
- "nom",
- "pathdiff",
- "ron",
- "rust-ini",
- "serde",
- "serde_json",
- "toml",
- "yaml-rust",
-]
-
-[[package]]
-name = "console_error_panic_hook"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
-dependencies = [
- "cfg-if",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "console_log"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be8aed40e4edbf4d3b4431ab260b63fdc40f5780a4766824329ea0f1eefe3c0f"
-dependencies = [
- "log",
- "web-sys",
-]
-
-[[package]]
-name = "const_format"
-version = "0.2.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48"
-dependencies = [
- "const_format_proc_macros",
-]
-
-[[package]]
-name = "const_format_proc_macros"
-version = "0.2.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-xid",
-]
-
-[[package]]
-name = "convert_case"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
-[[package]]
-name = "derive-where"
-version = "1.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "146398d62142a0f35248a608f17edf0dde57338354966d6e41d0eb2d16980ccb"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
-name = "dlv-list"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
-
-[[package]]
-name = "drain_filter_polyfill"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408"
-
-[[package]]
-name = "educe"
-version = "0.4.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "079044df30bb07de7d846d41a184c4b00e66ebdac93ee459253474f3a47e50ae"
-dependencies = [
- "enum-ordinalize",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "either"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
-
-[[package]]
-name = "encoding_rs"
-version = "0.8.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "enum-ordinalize"
-version = "3.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4f76552f53cefc9a7f64987c3701b99d982f7690606fd67de1d09712fbf52f1"
-dependencies = [
- "num-bigint",
- "num-traits",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
-dependencies = [
- "percent-encoding",
-]
-
-[[package]]
-name = "funty"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
-
-[[package]]
-name = "futures"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-io",
- "futures-sink",
- "futures-task",
- "futures-util",
-]
-
-[[package]]
-name = "futures-channel"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
-dependencies = [
- "futures-core",
- "futures-sink",
-]
-
-[[package]]
-name = "futures-core"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
-
-[[package]]
-name = "futures-executor"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
-dependencies = [
- "futures-core",
- "futures-task",
- "futures-util",
-]
-
-[[package]]
-name = "futures-io"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
-
-[[package]]
-name = "futures-macro"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "futures-sink"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
-
-[[package]]
-name = "futures-task"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
-
-[[package]]
-name = "futures-util"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-io",
- "futures-macro",
- "futures-sink",
- "futures-task",
- "memchr",
- "pin-project-lite",
- "pin-utils",
- "slab",
-]
-
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
-dependencies = [
- "cfg-if",
- "js-sys",
- "libc",
- "wasi",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "gimli"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
-
-[[package]]
-name = "gloo-net"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9902a044653b26b99f7e3693a42f171312d9be8b26b5697bd1e43ad1f8a35e10"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-sink",
- "gloo-utils",
- "js-sys",
- "pin-project",
- "serde",
- "serde_json",
- "thiserror",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "gloo-utils"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
-dependencies = [
- "js-sys",
- "serde",
- "serde_json",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "h2"
-version = "0.3.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
-dependencies = [
- "bytes",
- "fnv",
- "futures-core",
- "futures-sink",
- "futures-util",
- "http",
- "indexmap 1.9.3",
- "slab",
- "tokio",
- "tokio-util",
- "tracing",
-]
-
-[[package]]
-name = "half"
-version = "1.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
-
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
-
-[[package]]
-name = "html-escape"
-version = "0.2.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
-dependencies = [
- "utf8-width",
-]
-
-[[package]]
-name = "http"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
-dependencies = [
- "bytes",
- "fnv",
- "itoa",
-]
-
-[[package]]
-name = "http-body"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
-dependencies = [
- "bytes",
- "http",
- "pin-project-lite",
-]
-
-[[package]]
-name = "httparse"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
-
-[[package]]
-name = "httpdate"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
-
-[[package]]
-name = "hyper"
-version = "0.14.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
-dependencies = [
- "bytes",
- "futures-channel",
- "futures-core",
- "futures-util",
- "h2",
- "http",
- "http-body",
- "httparse",
- "httpdate",
- "itoa",
- "pin-project-lite",
- "socket2 0.4.9",
- "tokio",
- "tower-service",
- "tracing",
- "want",
-]
-
-[[package]]
-name = "idna"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "indexmap"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
-dependencies = [
- "equivalent",
- "hashbrown 0.14.0",
-]
-
-[[package]]
-name = "interpolator"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8"
-
-[[package]]
-name = "inventory"
-version = "0.3.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1be380c410bf0595e94992a648ea89db4dd3f3354ba54af206fd2a68cf5ac8e"
-
-[[package]]
-name = "ipnet"
-version = "2.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
-
-[[package]]
-name = "itertools"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
-
-[[package]]
-name = "js-sys"
-version = "0.3.64"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "json5"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
-dependencies = [
- "pest",
- "pest_derive",
- "serde",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "leptos"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65154cd0fc2f505a1676b870d5c055dec9dafe4d6081358ef1d7e357d6f222c5"
-dependencies = [
- "cfg-if",
- "leptos_config",
- "leptos_dom",
- "leptos_macro",
- "leptos_reactive",
- "leptos_server",
- "server_fn",
- "tracing",
- "typed-builder",
-]
-
-[[package]]
-name = "leptos-tw-site"
-version = "0.1.0"
-dependencies = [
- "console_error_panic_hook",
- "console_log",
- "leptos",
- "leptos_meta",
- "leptos_router",
- "log",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "leptos_config"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0108f6c8409c99fcf25f4c55a56b4bf9afeeb58f643879bb115d4258b9e22979"
-dependencies = [
- "config",
- "regex",
- "serde",
- "thiserror",
- "typed-builder",
-]
-
-[[package]]
-name = "leptos_dom"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5a92b7a30d6e1363233211babdd59fdd983f28dc3aa6aebbd7bfbdd15630c73"
-dependencies = [
- "async-recursion",
- "cfg-if",
- "drain_filter_polyfill",
- "educe",
- "futures",
- "getrandom",
- "html-escape",
- "indexmap 2.0.0",
- "itertools",
- "js-sys",
- "leptos_reactive",
- "once_cell",
- "pad-adapter",
- "paste",
- "rustc-hash",
- "serde",
- "serde_json",
- "server_fn",
- "smallvec",
- "tracing",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "leptos_hot_reload"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ef84aede40b027d1a4addd9bd54c89de722272429f7b21da40b04f9ebe5e3b2"
-dependencies = [
- "anyhow",
- "camino",
- "indexmap 2.0.0",
- "parking_lot",
- "proc-macro2",
- "quote",
- "rstml",
- "serde",
- "syn 2.0.31",
- "walkdir",
-]
-
-[[package]]
-name = "leptos_macro"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cc27567e059d8ab630a33bf782a81bb2e10178011b8c97c080aafcf09c4e5e0"
-dependencies = [
- "attribute-derive",
- "cfg-if",
- "convert_case",
- "html-escape",
- "itertools",
- "leptos_hot_reload",
- "prettyplease",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "rstml",
- "server_fn_macro",
- "syn 2.0.31",
- "tracing",
- "uuid",
-]
-
-[[package]]
-name = "leptos_meta"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "329c4bbe4191a0bef6514bab827f2ff1a1e69bc2b431e78ac9799e2bdc26ae33"
-dependencies = [
- "cfg-if",
- "indexmap 2.0.0",
- "leptos",
- "tracing",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "leptos_reactive"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b4fc821e6a8646635b721dd58b5604b5c447eb3b21c464b3837cd2063a6b209"
-dependencies = [
- "base64 0.21.3",
- "cfg-if",
- "futures",
- "indexmap 2.0.0",
- "js-sys",
- "rkyv",
- "rustc-hash",
- "self_cell",
- "serde",
- "serde-wasm-bindgen",
- "serde_json",
- "slotmap",
- "thiserror",
- "tracing",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "leptos_router"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "589f02384aaeff09ba17093305a0dfe8713fb171f7227a8543992a9ce44c75cd"
-dependencies = [
- "cfg-if",
- "common_macros",
- "gloo-net",
- "js-sys",
- "lazy_static",
- "leptos",
- "linear-map",
- "log",
- "once_cell",
- "percent-encoding",
- "serde",
- "serde_json",
- "serde_qs",
- "thiserror",
- "tracing",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "leptos_server"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc28e6ae7ca7bd36fc865fb844ecb27ddf72a0eb9514b7ee45d0cad6cf930c7d"
-dependencies = [
- "inventory",
- "lazy_static",
- "leptos_macro",
- "leptos_reactive",
- "serde",
- "server_fn",
- "thiserror",
- "tracing",
-]
-
-[[package]]
-name = "libc"
-version = "0.2.147"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
-
-[[package]]
-name = "linear-map"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee"
-dependencies = [
- "serde",
- "serde_test",
-]
-
-[[package]]
-name = "linked-hash-map"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
-
-[[package]]
-name = "lock_api"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
-dependencies = [
- "autocfg",
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
-
-[[package]]
-name = "memchr"
-version = "2.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
-
-[[package]]
-name = "mime"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
-
-[[package]]
-name = "minimal-lexical"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-
-[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
-]
-
-[[package]]
-name = "mio"
-version = "0.8.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
-dependencies = [
- "libc",
- "wasi",
- "windows-sys",
-]
-
-[[package]]
-name = "nom"
-version = "7.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
-dependencies = [
- "memchr",
- "minimal-lexical",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.4.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "object"
-version = "0.32.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-
-[[package]]
-name = "ordered-multimap"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
-dependencies = [
- "dlv-list",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "pad-adapter"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56d80efc4b6721e8be2a10a5df21a30fa0b470f1539e53d8b4e6e75faf938b63"
-
-[[package]]
-name = "parking_lot"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall",
- "smallvec",
- "windows-targets",
-]
-
-[[package]]
-name = "paste"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
-
-[[package]]
-name = "pathdiff"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
-
-[[package]]
-name = "percent-encoding"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
-
-[[package]]
-name = "pest"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33"
-dependencies = [
- "memchr",
- "thiserror",
- "ucd-trie",
-]
-
-[[package]]
-name = "pest_derive"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a"
-dependencies = [
- "pest",
- "pest_generator",
-]
-
-[[package]]
-name = "pest_generator"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141"
-dependencies = [
- "pest",
- "pest_meta",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "pest_meta"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f"
-dependencies = [
- "once_cell",
- "pest",
- "sha2",
-]
-
-[[package]]
-name = "pin-project"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
-dependencies = [
- "pin-project-internal",
-]
-
-[[package]]
-name = "pin-project-internal"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.2.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
-
-[[package]]
-name = "pin-utils"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-
-[[package]]
-name = "prettyplease"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8832c0f9be7e3cae60727e6256cfd2cd3c3e2b6cd5dad4190ecb2fd658c9030b"
-dependencies = [
- "proc-macro2",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-utils"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8"
-dependencies = [
- "proc-macro2",
- "quote",
- "smallvec",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.66"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "proc-macro2-diagnostics"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
- "version_check",
- "yansi",
-]
-
-[[package]]
-name = "ptr_meta"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
-dependencies = [
- "ptr_meta_derive",
-]
-
-[[package]]
-name = "ptr_meta_derive"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "quote-use"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7b5abe3fe82fdeeb93f44d66a7b444dedf2e4827defb0a8e69c437b2de2ef94"
-dependencies = [
- "quote",
- "quote-use-macros",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "quote-use-macros"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97ea44c7e20f16017a76a245bb42188517e13d16dcb1aa18044bc406cdc3f4af"
-dependencies = [
- "derive-where",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "radium"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "regex"
-version = "1.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.7.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
-
-[[package]]
-name = "rend"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
-dependencies = [
- "bytecheck",
-]
-
-[[package]]
-name = "reqwest"
-version = "0.11.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
-dependencies = [
- "base64 0.21.3",
- "bytes",
- "encoding_rs",
- "futures-core",
- "futures-util",
- "h2",
- "http",
- "http-body",
- "hyper",
- "ipnet",
- "js-sys",
- "log",
- "mime",
- "once_cell",
- "percent-encoding",
- "pin-project-lite",
- "serde",
- "serde_json",
- "serde_urlencoded",
- "tokio",
- "tower-service",
- "url",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "winreg",
-]
-
-[[package]]
-name = "rkyv"
-version = "0.7.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
-dependencies = [
- "bitvec",
- "bytecheck",
- "hashbrown 0.12.3",
- "ptr_meta",
- "rend",
- "rkyv_derive",
- "seahash",
- "tinyvec",
- "uuid",
-]
-
-[[package]]
-name = "rkyv_derive"
-version = "0.7.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "ron"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
-dependencies = [
- "base64 0.13.1",
- "bitflags",
- "serde",
-]
-
-[[package]]
-name = "rstml"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe542870b8f59dd45ad11d382e5339c9a1047cde059be136a7016095bbdefa77"
-dependencies = [
- "proc-macro2",
- "proc-macro2-diagnostics",
- "quote",
- "syn 2.0.31",
- "syn_derive",
- "thiserror",
-]
-
-[[package]]
-name = "rust-ini"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
-dependencies = [
- "cfg-if",
- "ordered-multimap",
-]
-
-[[package]]
-name = "rustc-demangle"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
-
-[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
-[[package]]
-name = "ryu"
-version = "1.0.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
-
-[[package]]
-name = "same-file"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "scopeguard"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-
-[[package]]
-name = "seahash"
-version = "4.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
-
-[[package]]
-name = "self_cell"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6"
-
-[[package]]
-name = "serde"
-version = "1.0.188"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde-wasm-bindgen"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
-dependencies = [
- "js-sys",
- "serde",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.188"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.105"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "serde_qs"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c"
-dependencies = [
- "percent-encoding",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "serde_test"
-version = "1.0.176"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a2f49ace1498612d14f7e0b8245519584db8299541dfe31a06374a828d620ab"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "serde_urlencoded"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
-dependencies = [
- "form_urlencoded",
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "server_fn"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fcddd58a35e4fd00f15dac8f2fc08deed175d8178b2c3e615f59a7e7be6fed7"
-dependencies = [
- "ciborium",
- "const_format",
- "gloo-net",
- "js-sys",
- "lazy_static",
- "once_cell",
- "proc-macro2",
- "quote",
- "reqwest",
- "serde",
- "serde_json",
- "serde_qs",
- "server_fn_macro_default",
- "syn 2.0.31",
- "thiserror",
- "xxhash-rust",
-]
-
-[[package]]
-name = "server_fn_macro"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9083155d5a075eda2d08f18663e4789e0d447a1000b225bc4e1746e849c95c8e"
-dependencies = [
- "const_format",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "serde",
- "syn 2.0.31",
- "xxhash-rust",
-]
-
-[[package]]
-name = "server_fn_macro_default"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8dba6c99de6539ec3193130f764427ead9d784a76ca3126f38e56a6a0b7a2f3d"
-dependencies = [
- "server_fn_macro",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "sha2"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
-[[package]]
-name = "simdutf8"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
-
-[[package]]
-name = "slab"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "slotmap"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
-dependencies = [
- "serde",
- "version_check",
-]
-
-[[package]]
-name = "smallvec"
-version = "1.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
-
-[[package]]
-name = "socket2"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "socket2"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
-dependencies = [
- "libc",
- "windows-sys",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn_derive"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8128874d02f9a114ade6d9ad252078cb32d3cb240e26477ac73d7e9c495c605e"
-dependencies = [
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "tap"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
-
-[[package]]
-name = "thiserror"
-version = "1.0.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "tokio"
-version = "1.32.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
-dependencies = [
- "backtrace",
- "bytes",
- "libc",
- "mio",
- "pin-project-lite",
- "socket2 0.5.3",
- "windows-sys",
-]
-
-[[package]]
-name = "tokio-util"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "pin-project-lite",
- "tokio",
- "tracing",
-]
-
-[[package]]
-name = "toml"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "tower-service"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
-
-[[package]]
-name = "tracing"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
-dependencies = [
- "cfg-if",
- "pin-project-lite",
- "tracing-attributes",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-attributes"
-version = "0.1.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
-]
-
-[[package]]
-name = "tracing-core"
-version = "0.1.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
-dependencies = [
- "once_cell",
-]
-
-[[package]]
-name = "try-lock"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
-
-[[package]]
-name = "typed-builder"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64cba322cb9b7bc6ca048de49e83918223f35e7a86311267013afff257004870"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "typenum"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
-
-[[package]]
-name = "ucd-trie"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
-
-[[package]]
-name = "url"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
-dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
-]
-
-[[package]]
-name = "utf8-width"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
-
-[[package]]
-name = "uuid"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "walkdir"
-version = "2.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
-dependencies = [
- "same-file",
- "winapi-util",
-]
-
-[[package]]
-name = "want"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
-dependencies = [
- "try-lock",
-]
-
-[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
-dependencies = [
- "bumpalo",
- "log",
- "once_cell",
- "proc-macro2",
- "quote",
- "syn 2.0.31",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-futures"
-version = "0.4.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
-dependencies = [
- "cfg-if",
- "js-sys",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.31",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
-
-[[package]]
-name = "web-sys"
-version = "0.3.64"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
-dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
-
-[[package]]
-name = "winreg"
-version = "0.50.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
-dependencies = [
- "cfg-if",
- "windows-sys",
-]
-
-[[package]]
-name = "wyz"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
-dependencies = [
- "tap",
-]
-
-[[package]]
-name = "xxhash-rust"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70"
-
-[[package]]
-name = "yaml-rust"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
-dependencies = [
- "linked-hash-map",
-]
-
-[[package]]
-name = "yansi"
-version = "1.0.0-rc.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377"
diff --git a/site/Cargo.toml b/site/Cargo.toml
index 89c6a26..38a92e5 100644
--- a/site/Cargo.toml
+++ b/site/Cargo.toml
@@ -6,13 +6,13 @@ edition = "2021"
[dependencies]
console_error_panic_hook = { version = "0.1" }
console_log = { version = "1" }
-leptos = { version = "0.5.3", features = ["csr", "nightly"] }
+leptos = { version = "0.5.4", features = ["csr", "nightly"] }
leptos-tw-ui.workspace = true
-leptos_meta = { version = "0.5.3", features = ["csr", "nightly"] }
-leptos_router = { version = "0.5.3", features = ["csr", "nightly"] }
+leptos_meta = { version = "0.5.4", features = ["csr", "nightly"] }
+leptos_router = { version = "0.5.4", features = ["csr", "nightly"] }
log = "0.4"
wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = ["Window", "Clipboard", "Navigator", "Element", "DateTimeValue"] }
-wana_kana = { path = "../wana_kana_rust" }
+wana_kana = { git = "https://github.com/GlooriousWalrus/wana_kana_rust" }
wasm-bindgen-futures = "0.4"
chrono = { version = "*", features = ["wasmbind"]}
diff --git a/site/src/pages/about.rs b/site/src/pages/about.rs
index 8a1cfe3..8137c01 100644
--- a/site/src/pages/about.rs
+++ b/site/src/pages/about.rs
@@ -176,7 +176,7 @@ fn AboutTextBlock() -> impl IntoView {
{"Сполучення /ei/ : sensei — сенсей ✅"}
- {"Редукція - Sasuke — Саске 🔴"}
+ {"Редукція - Sasuke — Саске НЕ ВИКОРИСТОВУЄТЬСЯ 🔴"}
{"Є у Коваленка: Ieyasu — Ієясу ✅"}
@@ -202,13 +202,13 @@ fn AboutTextBlock() -> impl IntoView {
- Подяки
+ Окрема подяка:
- {"Наступні люди надали зворотній зв'язок про вебзастосунок на ранніх етапах та допомогли зробити його таким яким він є сьогодні:"}
+ {"Наступні люди надали зворотній зв'язок про вебзастосунок на ранніх етапах та допомогли зробити його таким, яким він є сьогодні:"}
ОКЕ - Особлива подяка за ідею, допомогу з перекладами та правописом.
diff --git a/site/src/pages/transliterator.rs b/site/src/pages/transliterator.rs
index 0ab59b6..68be3ad 100644
--- a/site/src/pages/transliterator.rs
+++ b/site/src/pages/transliterator.rs
@@ -1,7 +1,7 @@
use leptos::*;
use leptos_meta::Title;
use std::time::Duration;
-use wana_kana::ConvertJapanese;
+use wana_kana::{ConvertJapanese, Options};
extern crate wana_kana;
@@ -222,7 +222,14 @@ fn Inputfield(
on:input=move |ev| {
ev.prevent_default();
let value = input_element().expect(" to exist").value();
- set_name(value.to_romaji());
+ set_name(value.
+ to_ukrainian_with_opt(
+ Options {
+ imemode: true,
+ ..Default::default()
+ }
+ )
+ )
}
// prop:value=name
diff --git a/wana_kana_rust/.github/workflows/rust.yml b/wana_kana_rust/.github/workflows/rust.yml
deleted file mode 100644
index 4d1504c..0000000
--- a/wana_kana_rust/.github/workflows/rust.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Rust
-
-on:
- push:
- branches:
- - "*"
- pull_request:
-
-env:
- CARGO_TERM_COLOR: always
-
-jobs:
- build:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- version:
- - stable
- - beta
- - nightly
- steps:
- - uses: actions/checkout@v1
- - uses: actions-rs/toolchain@v1
- with:
- toolchain: ${{ matrix.version }}
- override: true
- - name: clean
- run: cargo clean
- - name: build
- run: cargo build --verbose --all-features
- env:
- RUST_BACKTRACE: 1
- - name: test
- if: matrix.version == 'nightly'
- run: cargo test --all-features
- env:
- RUST_BACKTRACE: 1
\ No newline at end of file
diff --git a/wana_kana_rust/.idea/misc.xml b/wana_kana_rust/.idea/misc.xml
deleted file mode 100644
index 6a0d516..0000000
--- a/wana_kana_rust/.idea/misc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wana_kana_rust/.idea/modules.xml b/wana_kana_rust/.idea/modules.xml
deleted file mode 100644
index f579ce0..0000000
--- a/wana_kana_rust/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wana_kana_rust/.idea/vcs.xml b/wana_kana_rust/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/wana_kana_rust/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wana_kana_rust/.idea/wana_kana_rust.iml b/wana_kana_rust/.idea/wana_kana_rust.iml
deleted file mode 100644
index d6ebd48..0000000
--- a/wana_kana_rust/.idea/wana_kana_rust.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wana_kana_rust/.idea/workspace.xml b/wana_kana_rust/.idea/workspace.xml
deleted file mode 100644
index 0814575..0000000
--- a/wana_kana_rust/.idea/workspace.xml
+++ /dev/null
@@ -1,347 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1517683240970
-
-
- 1517683240970
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wana_kana_rust/.travis.yml b/wana_kana_rust/.travis.yml
deleted file mode 100644
index 4c43d80..0000000
--- a/wana_kana_rust/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: rust
-sudo: required
-dist: trusty
-addons:
- apt:
- packages:
- - libssl-dev
-cache: cargo
-rust:
- - nightly
-
-after_success: |
- # bash <(curl https://raw.githubusercontent.com/xd009642/tarpaulin/master/travis-install.sh)
- curl -sL https://github.com/xd009642/tarpaulin/releases/download/0.9.1/cargo-tarpaulin-0.9.1-travis.tar.gz | tar xvz -C $HOME/.cargo/bin
- # Uncomment the following line for coveralls.io
- RAYON_NUM_THREADS=1 cargo tarpaulin --all --exclude-files "src/bin/*" --ciserver travis-ci --coveralls $TRAVIS_JOB_ID
-
- # Uncomment the following two lines create and upload a report for codecov.io
- # cargo tarpaulin --out Xml
- # bash <(curl -s https://codecov.io/bash)
diff --git a/wana_kana_rust/Cargo.lock b/wana_kana_rust/Cargo.lock
deleted file mode 100644
index b524acc..0000000
--- a/wana_kana_rust/Cargo.lock
+++ /dev/null
@@ -1,84 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "aho-corasick"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "either"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-
-[[package]]
-name = "itertools"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "memchr"
-version = "2.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
-
-[[package]]
-name = "regex"
-version = "1.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
-
-[[package]]
-name = "wana_kana"
-version = "3.0.0"
-dependencies = [
- "fnv",
- "itertools",
- "lazy_static",
- "regex",
-]
diff --git a/wana_kana_rust/Cargo.toml b/wana_kana_rust/Cargo.toml
deleted file mode 100644
index 5360486..0000000
--- a/wana_kana_rust/Cargo.toml
+++ /dev/null
@@ -1,40 +0,0 @@
-[package]
-authors = ["Pascal Seitz "]
-categories = ["text-processing"]
-description = "Utility library for checking and converting between Japanese characters - Kanji, Hiragana, Katakana - and Romaji\n"
-edition = "2018"
-homepage = "https://github.com/PSeitz/wana_kana_rust"
-keywords = ["japanese", "katakana", "hiragana", "kana", "romaji"]
-license = "MIT"
-name = "wana_kana"
-readme = "README.md"
-repository = "https://github.com/PSeitz/wana_kana_rust"
-version = "3.0.0"
-include = ["src/**/*", "LICENSE", "README.md"]
-
-[dependencies]
-fnv = "1.0.7"
-itertools = { version = "0.10.5", optional = true }
-lazy_static = "1.4.0"
-regex = { version = "1.7.1", optional = true }
-
-
-[features]
-enable_regex = ["regex"]
-tokenize = ["itertools"]
-default = ["tokenize"]
-
-[[bin]]
-name = "to_kana"
-path = "src/bin/to_kana.rs"
-
-[[bin]]
-name = "to_romaji"
-path = "src/bin/to_romaji.rs"
-
-# docs.rs-specific configuration
-[package.metadata.docs.rs]
-# document all features
-all-features = true
-# defines the configuration attribute `docsrs`
-rustdoc-args = ["--cfg", "docsrs"]
diff --git a/wana_kana_rust/LICENSE b/wana_kana_rust/LICENSE
deleted file mode 100644
index c3d89d9..0000000
--- a/wana_kana_rust/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2018 Pascal Seitz
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/wana_kana_rust/README.md b/wana_kana_rust/README.md
deleted file mode 100644
index 2705776..0000000
--- a/wana_kana_rust/README.md
+++ /dev/null
@@ -1,109 +0,0 @@
- [![Crates.io](https://img.shields.io/crates/v/wana_kana.svg)](https://crates.io/crates/wana_kana)
- [![Docs](https://docs.rs/wana_kana/badge.svg)](https://docs.rs/crate/wana_kana/)
- [![Build Status](https://travis-ci.org/PSeitz/wana_kana_rust.svg?branch=master)](https://travis-ci.org/PSeitz/wana_kana_rust)
- [![Coverage Status](https://coveralls.io/repos/github/PSeitz/wana_kana_rust/badge.svg?branch=master)](https://coveralls.io/github/PSeitz/wana_kana_rust?branch=master)
-
- ## WanaKana Rust
- ### ワナカナ <--> WanaKana <--> わなかな
-```toml,ignore
-[dependencies]
-wana_kana = "2.0"
-```
-
-
- Utility library for checking and converting between Japanese characters - Hiragana, Katakana - and Romaji (Ported from https://github.com/WaniKani/WanaKana V4.0.2)
- ## Examples
- ```
- use wana_kana::to_romaji::*;
- use wana_kana::to_kana::*;
- use wana_kana::to_hiragana::*;
- use wana_kana::Options;
- assert_eq!(to_romaji("ワナカナ"), "wanakana");
- assert_eq!(to_hiragana("WanaKana"), "わなかな");
- assert_eq!(to_kana("WANAKANA"), "ワナカナ");
- ```
-
-## Tests
-
-![100% coverage](https://raw.githubusercontent.com/PSeitz/wana_kana_rust/master/coverage_good.png)
-
-## Performance
-On Migrating to 2.0 some performance improvements have been implemented by using more efficient lookup structures and avoiding allocations.
-According to these results around 1000 words can be converted per millisecond on a Core i7-6700.
-
-```
- bench_hiragana_to_romaji 3,519 1,070 -2,449 -69.59% x 3.29
- bench_kana_1 3,066 567 -2,499 -81.51% x 5.41
- bench_kana_2 8,006 1,831 -6,175 -77.13% x 4.37
- bench_katakana_to_hiragana 2,512 622 -1,890 -75.24% x 4.04
- bench_katakana_to_katakana 1,664 629 -1,035 -62.20% x 2.65
- bench_katakana_to_romaji 6,922 1,067 -5,855 -84.59% x 6.49
- bench_romaji_to_hiragana 3,802 1,300 -2,502 -65.81% x 2.92
- bench_romaji_to_katakana 4,361 1,929 -2,432 -55.77% x 2.26
-```
-
-### Comparison To [WanaKana](https://github.com/WaniKani/WanaKana)
-
-A detailed analysis has been done in the [bench_compare](bench_compare/README.md) subfolder, the analysis below may be inaccurate.
-
-A short comparison suggests around 25x performance
-
-```javascript
-import toKana from './src/toKana';
-import toHiragana from './src/toHiragana';
-import toKatakana from './src/toKatakana';
-import toRomaji from './src/toRomaji';
-
-
-console.time("yo")
-for (var i = 0; i < 1000; i++) {
- toKana('aiueosashisusesonaninunenokakikukeko')
- toKana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- toHiragana('aiueosashisusesonaninunenokakikukeko')
- toHiragana('アイウエオサシスセソナニヌネノカキクケコ')
- toKatakana('aiueosashisusesonaninunenokakikukeko')
- toKatakana('あいうえおさしすせそなにぬねのかきくけこ')
- toRomaji('あいうえおさしすせそなにぬねのかきくけこ')
- toRomaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-console.timeEnd("yo")
-```
-`node -r esm run.js`
-
-```rust
-extern crate wana_kana;
-use wana_kana::to_hiragana::to_hiragana;
-use wana_kana::to_katakana::to_katakana;
-use wana_kana::to_romaji::to_romaji;
-use wana_kana::to_kana::*;
-
-
-fn main() {
- let start = std::time::Instant::now();
- for _ in 0..1000 {
- to_kana("aiueosashisusesonaninunenokakikukeko");
- to_kana("AIUEOSASHISUSESONANINUNENOKAKIKUKEKO");
- to_hiragana("aiueosashisusesonaninunenokakikukeko");
- to_hiragana("アイウエオサシスセソナニヌネノカキクケコ");
- to_katakana("aiueosashisusesonaninunenokakikukeko");
- to_katakana("あいうえおさしすせそなにぬねのかきくけこ");
- to_romaji("あいうえおさしすせそなにぬねのかきくけこ");
- to_romaji("アイウエオサシスセソナニヌネノカキクケコ");
- }
-
- println!("{:?}", start.elapsed().as_millis());
-}
-
-```
-
-`node -r esm run.js` *253.231ms*
-
-`cargo run --release --bin bench` *9ms*
-
-
-### CLI
-#### Convert to kana and back for fun and profit
-`cargo install wana_kana` will install 2 CLI tools: `to_kana` and `to_romaji`.
-
-Both commands support piping `ls | to_kana` and parameters `to_romaji へろ をるど`.
diff --git a/wana_kana_rust/bench_compare/.gitignore b/wana_kana_rust/bench_compare/.gitignore
deleted file mode 100644
index efb7fe7..0000000
--- a/wana_kana_rust/bench_compare/.gitignore
+++ /dev/null
@@ -1,110 +0,0 @@
-
-# Created by https://www.gitignore.io/api/node,rust
-# Edit at https://www.gitignore.io/?templates=node,rust
-
-### Node ###
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-*.lcov
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# TypeScript v1 declaration files
-typings/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
-.env.test
-
-# parcel-bundler cache (https://parceljs.org/)
-.cache
-
-# next.js build output
-.next
-
-# nuxt.js build output
-.nuxt
-
-# react / gatsby
-public/
-
-# vuepress build output
-.vuepress/dist
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-### Rust ###
-# Generated by Cargo
-# will have compiled files and executables
-/target/
-
-# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
-# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
-Cargo.lock
-
-# These are backup files generated by rustfmt
-**/*.rs.bk
-
-# End of https://www.gitignore.io/api/node,rust
diff --git a/wana_kana_rust/bench_compare/Cargo.toml b/wana_kana_rust/bench_compare/Cargo.toml
deleted file mode 100644
index 79bdf90..0000000
--- a/wana_kana_rust/bench_compare/Cargo.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-[package]
-name = "bench_compare"
-version = "0.1.0"
-authors = ["Pascal Seitz "]
-edition = "2018"
-
-[dependencies]
-wana_kana = { path = "../" }
-
-[[bin]]
-name = "bench"
-path = "bench.rs"
-
-[profile.release]
-codegen-units = 1
-debug = true
-lto = true
-opt-level = 3
-panic = "unwind"
\ No newline at end of file
diff --git a/wana_kana_rust/bench_compare/README.md b/wana_kana_rust/bench_compare/README.md
deleted file mode 100644
index 3e26b6c..0000000
--- a/wana_kana_rust/bench_compare/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-## Benchmarks
-
-This compares 4 projects:
-- [pure javascript](bench_javascript.js)
-- [pure rust](bench.rs)
-- [wasm generated from rust](bench_wasm.js)
-- [rust with node using neon](bench_nodejs_bindings.js)
-
-There are be some differences in the datastructures between javascript and the port to rust, but I think these differences are idiomatic. Overall the algorithms are implemented in a similar way and behave equally, the tests were also ported. Everything is singlethreaded.
-
-### Test
-
-```javascript
-
-for (var i = 0; i < 1000; i++) {
- wanakana.toKana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toKana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- wanakana.toHiragana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toHiragana('アイウエオサシスセソナニヌネノカキクケコ')
- wanakana.toKatakana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toKatakana('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.toRomaji('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.toRomaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-```
-
-
-
-### Results
-
-
-| Num Loops | | javascript | rust | wasm (rust) | node with rust bindings |
-|------- | ------------- | ------------- |---------------| ------------|------------------------ |
-| 1_000 | Wall Time[ms] | 253 | 9 | 72 | 18 |
-| | Wall Time Relative | 28x | 1x | 8x | 2x |
-| 100_000 | Wall Time[ms] | 16149 | 1959 | 3783 | 3131 |
-| | Wall Time Relative | 8,2x | 1x | 1,93x | 1,59x |
-| 1_000_000 | Wall Time[ms] | 181879 | 21956 | 36885 | 31294 |
-| | Wall Time Relative | 8,2x | 1x | 1,67x | 1,42x |
-
-### Conclusion
-
-It can make sense to port performance sensitive code to wasm if total compatiblity is required (e.g. browser and node support, or no rust compiler feasible).
-More gains are possible when using native rust code or calling rust from nodejs.
-
-### Open
-No analysis regarding memory analysis has been done yet.
diff --git a/wana_kana_rust/bench_compare/bench.rs b/wana_kana_rust/bench_compare/bench.rs
deleted file mode 100644
index 975896d..0000000
--- a/wana_kana_rust/bench_compare/bench.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-extern crate wana_kana;
-use wana_kana::to_hiragana::to_hiragana;
-use wana_kana::to_katakana::to_katakana;
-use wana_kana::to_romaji::to_romaji;
-use wana_kana::to_kana::*;
-
-
-fn main() {
- let start = std::time::Instant::now();
- for _ in 0..1000 {
- to_kana("aiueosashisusesonaninunenokakikukeko");
- to_kana("AIUEOSASHISUSESONANINUNENOKAKIKUKEKO");
- to_hiragana("aiueosashisusesonaninunenokakikukeko");
- to_hiragana("アイウエオサシスセソナニヌネノカキクケコ");
- to_katakana("aiueosashisusesonaninunenokakikukeko");
- to_katakana("あいうえおさしすせそなにぬねのかきくけこ");
- to_romaji("あいうえおさしすせそなにぬねのかきくけこ");
- to_romaji("アイウエオサシスセソナニヌネノカキクケコ");
- }
-
- println!("{:.2}", start.elapsed().as_nanos() as f32/1_000_000_f32);
-}
\ No newline at end of file
diff --git a/wana_kana_rust/bench_compare/bench_javascript.js b/wana_kana_rust/bench_compare/bench_javascript.js
deleted file mode 100644
index d662777..0000000
--- a/wana_kana_rust/bench_compare/bench_javascript.js
+++ /dev/null
@@ -1,15 +0,0 @@
-let wanakana = require("wanakana");
-console.time("javascript")
-
-for (var i = 0; i < 1000; i++) {
- wanakana.toKana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toKana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- wanakana.toHiragana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toHiragana('アイウエオサシスセソナニヌネノカキクケコ')
- wanakana.toKatakana('aiueosashisusesonaninunenokakikukeko')
- wanakana.toKatakana('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.toRomaji('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.toRomaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-console.timeEnd("javascript")
\ No newline at end of file
diff --git a/wana_kana_rust/bench_compare/bench_nodejs_bindings.js b/wana_kana_rust/bench_compare/bench_nodejs_bindings.js
deleted file mode 100644
index 7a61305..0000000
--- a/wana_kana_rust/bench_compare/bench_nodejs_bindings.js
+++ /dev/null
@@ -1,16 +0,0 @@
-
-var wanakana = require('../nodejs-bindings/lib');
-
-console.time("bindings")
-for (var i = 0; i < 1000; i++) {
- wanakana.to_kana('aiueosashisusesonaninunenokakikukeko')
- wanakana.to_kana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- wanakana.to_hiragana('aiueosashisusesonaninunenokakikukeko')
- wanakana.to_hiragana('アイウエオサシスセソナニヌネノカキクケコ')
- wanakana.to_katakana('aiueosashisusesonaninunenokakikukeko')
- wanakana.to_katakana('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.to_romaji('あいうえおさしすせそなにぬねのかきくけこ')
- wanakana.to_romaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-console.timeEnd("bindings")
\ No newline at end of file
diff --git a/wana_kana_rust/bench_compare/bench_wasm.js b/wana_kana_rust/bench_compare/bench_wasm.js
deleted file mode 100644
index c0bb83d..0000000
--- a/wana_kana_rust/bench_compare/bench_wasm.js
+++ /dev/null
@@ -1,16 +0,0 @@
-
-var wana_kana_wasm = require('../wana_kana_wasm/wasmbinding/wana_kana_wasm.js');
-
-console.time("wasm")
-for (var i = 0; i < 1000; i++) {
- wana_kana_wasm.to_kana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_kana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- wana_kana_wasm.to_hiragana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_hiragana('アイウエオサシスセソナニヌネノカキクケコ')
- wana_kana_wasm.to_katakana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_katakana('あいうえおさしすせそなにぬねのかきくけこ')
- wana_kana_wasm.to_romaji('あいうえおさしすせそなにぬねのかきくけこ')
- wana_kana_wasm.to_romaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-console.timeEnd("wasm")
diff --git a/wana_kana_rust/bench_compare/package-lock.json b/wana_kana_rust/bench_compare/package-lock.json
deleted file mode 100644
index fb7c20f..0000000
--- a/wana_kana_rust/bench_compare/package-lock.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "bench_compare",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "wanakana": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/wanakana/-/wanakana-4.0.2.tgz",
- "integrity": "sha512-lBFtnLJhTpp5wQBdH7TrOHhLxqmUabAfL86plNN8+iffyhosjZyx+kkO8KEBGR8zWH5nxSQ67oyx3W/lcEC8sg=="
- }
- }
-}
diff --git a/wana_kana_rust/bench_compare/package.json b/wana_kana_rust/bench_compare/package.json
deleted file mode 100644
index bbd1da6..0000000
--- a/wana_kana_rust/bench_compare/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "bench_compare",
- "version": "1.0.0",
- "description": "",
- "main": "bench_nodejs_bindings.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "",
- "license": "ISC",
- "dependencies": {
- "wanakana": "^4.0.2"
- }
-}
diff --git a/wana_kana_rust/benches/bench.rs b/wana_kana_rust/benches/bench.rs
deleted file mode 100644
index 84bde7d..0000000
--- a/wana_kana_rust/benches/bench.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-#![feature(test)]
-
-extern crate test;
-
-#[cfg(test)]
-mod tests {
- use test::Bencher;
- use wana_kana::{to_kana, to_romaji, *};
-
- #[bench]
- fn bench_kana_1(b: &mut test::Bencher) {
- b.iter(|| to_kana::to_kana("aiueosashisusesonaninunenokakikukeko"))
- }
-
- #[bench]
- fn bench_kana_2(b: &mut test::Bencher) {
- b.iter(|| to_kana::to_kana("AIUEOSASHISUSESONANINUNENOKAKIKUKEKO"))
- }
-
- #[bench]
- fn bench_romaji_to_hiragana(b: &mut test::Bencher) {
- b.iter(|| "aiueosashisusesonaninunenokakikukeko".to_hiragana())
- }
-
- #[bench]
- fn bench_katakana_to_hiragana(b: &mut test::Bencher) {
- b.iter(|| "アイウエオサシスセソナニヌネノカキクケコ".to_hiragana())
- }
-
- #[bench]
- fn bench_romaji_to_katakana(b: &mut test::Bencher) {
- b.iter(|| "aiueosashisusesonaninunenokakikukeko".to_katakana())
- }
-
- #[bench]
- fn bench_katakana_to_katakana(b: &mut test::Bencher) {
- b.iter(|| "あいうえおさしすせそなにぬねのかきくけこ".to_katakana())
- }
-
- #[bench]
- fn bench_hiragana_to_romaji(b: &mut test::Bencher) {
- b.iter(|| to_romaji::to_romaji("あいうえおさしすせそなにぬねのかきくけこ"))
- }
-
- #[bench]
- fn bench_katakana_to_romaji(b: &mut test::Bencher) {
- b.iter(|| to_romaji::to_romaji("アイウエオサシスセソナニヌネノカキクケコ"))
- }
-}
diff --git a/wana_kana_rust/coverage_good.png b/wana_kana_rust/coverage_good.png
deleted file mode 100644
index badb934..0000000
Binary files a/wana_kana_rust/coverage_good.png and /dev/null differ
diff --git a/wana_kana_rust/make_docs.sh b/wana_kana_rust/make_docs.sh
deleted file mode 100755
index 1bb6ed8..0000000
--- a/wana_kana_rust/make_docs.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features
diff --git a/wana_kana_rust/nodejs-bindings/.gitignore b/wana_kana_rust/nodejs-bindings/.gitignore
deleted file mode 100644
index 0b3cb79..0000000
--- a/wana_kana_rust/nodejs-bindings/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-native/target
-native/index.node
-native/artifacts.json
-**/*~
-**/node_modules
-**/.DS_Store
diff --git a/wana_kana_rust/nodejs-bindings/README.md b/wana_kana_rust/nodejs-bindings/README.md
deleted file mode 100644
index 571b3de..0000000
--- a/wana_kana_rust/nodejs-bindings/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Building
-
-`npm install -g neon-cli`
-`neon build --release`
diff --git a/wana_kana_rust/nodejs-bindings/lib/index.js b/wana_kana_rust/nodejs-bindings/lib/index.js
deleted file mode 100644
index 8e7ec22..0000000
--- a/wana_kana_rust/nodejs-bindings/lib/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var wana_kana_wasm = require('../native');
-module.exports = wana_kana_wasm;
-
-
-// console.time("bindings")
-// for (var i = 0; i < 1000; i++) {
-// wana_kana_wasm.to_kana('aiueosashisusesonaninunenokakikukeko')
-// wana_kana_wasm.to_kana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
-// wana_kana_wasm.to_hiragana('aiueosashisusesonaninunenokakikukeko')
-// wana_kana_wasm.to_hiragana('アイウエオサシスセソナニヌネノカキクケコ')
-// wana_kana_wasm.to_katakana('aiueosashisusesonaninunenokakikukeko')
-// wana_kana_wasm.to_katakana('あいうえおさしすせそなにぬねのかきくけこ')
-// wana_kana_wasm.to_romaji('あいうえおさしすせそなにぬねのかきくけこ')
-// wana_kana_wasm.to_romaji('アイウエオサシスセソナニヌネノカキクケコ')
-// }
-
-// console.timeEnd("bindings")
\ No newline at end of file
diff --git a/wana_kana_rust/nodejs-bindings/native/Cargo.toml b/wana_kana_rust/nodejs-bindings/native/Cargo.toml
deleted file mode 100644
index c089e76..0000000
--- a/wana_kana_rust/nodejs-bindings/native/Cargo.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-[package]
-name = "nodejs-bindings"
-version = "0.1.0"
-authors = ["Pascal Seitz "]
-license = "MIT"
-build = "build.rs"
-exclude = ["artifacts.json", "index.node"]
-
-[lib]
-name = "nodejs_bindings"
-crate-type = ["cdylib"]
-
-[build-dependencies]
-neon-build = "0.3.3"
-
-[dependencies]
-neon = "0.3.3"
-wana_kana = { path = "../../" }
diff --git a/wana_kana_rust/nodejs-bindings/native/build.rs b/wana_kana_rust/nodejs-bindings/native/build.rs
deleted file mode 100644
index 67e4a7f..0000000
--- a/wana_kana_rust/nodejs-bindings/native/build.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-extern crate neon_build;
-
-fn main() {
- neon_build::setup(); // must be called in build.rs
-
- // add project-specific build logic here...
-}
\ No newline at end of file
diff --git a/wana_kana_rust/nodejs-bindings/native/src/lib.rs b/wana_kana_rust/nodejs-bindings/native/src/lib.rs
deleted file mode 100644
index 8dcfb71..0000000
--- a/wana_kana_rust/nodejs-bindings/native/src/lib.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-#[macro_use]
-extern crate neon;
-
-extern crate wana_kana;
-
-use neon::prelude::*;
-use wana_kana::to_romaji;
-use wana_kana::to_kana;
-use wana_kana::to_hiragana;
-use wana_kana::to_katakana;
-
-
-pub fn to_romaji(mut cx:FunctionContext) -> JsResult {
- let result = to_romaji::to_romaji(&cx.argument::(0)?.value());
- Ok(cx.string(result))
-}
-
-pub fn to_kana(mut cx:FunctionContext) -> JsResult {
- let result = to_kana::to_kana(&cx.argument::(0)?.value());
- Ok(cx.string(result))
-}
-
-pub fn to_hiragana(mut cx:FunctionContext) -> JsResult {
- let result = to_hiragana::to_hiragana(&cx.argument::(0)?.value());
- Ok(cx.string(result))
-}
-
-pub fn to_katakana(mut cx:FunctionContext) -> JsResult {
- let result = to_katakana::to_katakana(&cx.argument::(0)?.value());
- Ok(cx.string(result))
-}
-
-register_module!(mut cx, {
- cx.export_function("to_romaji", to_romaji)?;
- cx.export_function("to_kana", to_kana)?;
- cx.export_function("to_hiragana", to_hiragana)?;
- cx.export_function("to_katakana", to_katakana)?;
- Ok(())
-});
\ No newline at end of file
diff --git a/wana_kana_rust/nodejs-bindings/package.json b/wana_kana_rust/nodejs-bindings/package.json
deleted file mode 100644
index 479f316..0000000
--- a/wana_kana_rust/nodejs-bindings/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "nodejs-bindings",
- "version": "0.1.0",
- "description": "wana_kana",
- "main": "lib/index.js",
- "author": "Pascal Seitz ",
- "license": "MIT",
- "dependencies": {
- "neon-cli": "^0.3.3"
- },
- "scripts": {
- "install": "neon build"
- }
-}
diff --git a/wana_kana_rust/rustfmt.toml b/wana_kana_rust/rustfmt.toml
deleted file mode 100644
index 71487e4..0000000
--- a/wana_kana_rust/rustfmt.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-comment_width = 120
-format_strings = true
-group_imports = "StdExternalCrate"
-imports_granularity = "Module"
-normalize_comments = true
-where_single_line = true
-wrap_comments = true
diff --git a/wana_kana_rust/src/bin/to_kana.rs b/wana_kana_rust/src/bin/to_kana.rs
deleted file mode 100644
index 013bafd..0000000
--- a/wana_kana_rust/src/bin/to_kana.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-use std::env;
-use std::io::{self, Read};
-
-use wana_kana::ConvertJapanese;
-
-fn main() {
- let args: String = env::args().skip(1).collect::>().join(" ");
- if !args.is_empty() {
- println!("{}", (&args.to_kana()));
- } else {
- let mut buffer = String::new();
- io::stdin().read_to_string(&mut buffer).unwrap();
- if !buffer.is_empty() {
- print!("{}", (&buffer.to_kana()));
- }
- }
-}
diff --git a/wana_kana_rust/src/bin/to_romaji.rs b/wana_kana_rust/src/bin/to_romaji.rs
deleted file mode 100644
index 36acbec..0000000
--- a/wana_kana_rust/src/bin/to_romaji.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-use std::env;
-use std::io::{self, Read};
-
-use wana_kana::ConvertJapanese;
-
-fn main() {
- let args: String = env::args().skip(1).collect::>().join(" ");
- if !args.is_empty() {
- println!("{}", (&args).to_romaji());
- } else {
- let mut buffer = String::new();
- io::stdin().read_to_string(&mut buffer).unwrap();
- if !buffer.is_empty() {
- print!("{}", (&buffer).to_romaji());
- }
- }
-}
diff --git a/wana_kana_rust/src/constants.rs b/wana_kana_rust/src/constants.rs
deleted file mode 100644
index e805e84..0000000
--- a/wana_kana_rust/src/constants.rs
+++ /dev/null
@@ -1,98 +0,0 @@
-//! CharCode References
-//!
-//!
-
-pub const CJK_SYMBOLS_PUNCTUATION: [u32; 2] = [0x3000, 0x303F];
-pub const KATAKANA_PUNCTUATION: [u32; 2] = [0x30FB, 0x30FC];
-pub const HIRAGANA_CHARS: [u32; 2] = [0x3040, 0x309F];
-pub const KATAKANA_CHARS: [u32; 2] = [0x30A0, 0x30FF];
-
-pub const LOWERCASE_ZENKAKU_START: u32 = 0xff41;
-pub const LOWERCASE_ZENKAKU_END: u32 = 0xff5a;
-pub const UPPERCASE_ZENKAKU_START: u32 = 0xff21;
-pub const UPPERCASE_ZENKAKU_END: u32 = 0xff3a;
-pub const ZENKAKU_NUMBERS: [u32; 2] = [0xFF10, 0xFF19];
-pub const ZENKAKU_PUNCTUATION_1: [u32; 2] = [0xFF01, 0xFF0F];
-pub const ZENKAKU_PUNCTUATION_2: [u32; 2] = [0xFF1A, 0xFF1F];
-pub const ZENKAKU_PUNCTUATION_3: [u32; 2] = [0xFF3B, 0xFF3F];
-pub const ZENKAKU_PUNCTUATION_4: [u32; 2] = [0xFF5B, 0xFF60];
-pub const ZENKAKU_UPPERCASE: [u32; 2] = [UPPERCASE_ZENKAKU_START, UPPERCASE_ZENKAKU_END];
-pub const ZENKAKU_LOWERCASE: [u32; 2] = [LOWERCASE_ZENKAKU_START, LOWERCASE_ZENKAKU_END];
-pub const ZENKAKU_SYMBOLS_CURRENCY: [u32; 2] = [0xFFE0, 0xFFEE];
-pub const KANA_PUNCTUATION: [u32; 2] = [0xFF61, 0xFF65];
-pub const HANKAKU_KATAKANA: [u32; 2] = [0xFF66, 0xFF9F];
-pub const COMMON_CJK: [u32; 2] = [0x4E00, 0x9FFF];
-pub const RARE_CJK: [u32; 2] = [0x3400, 0x4DBF];
-pub const LATIN_NUMBERS: [u32; 2] = [0x0030, 0x0039];
-pub const MODERN_ENGLISH: [u32; 2] = [0x0000, 0x007f];
-pub const HEPBURN_MACRON_RANGES: [[u32; 2]; 5] = [
- [0x0100, 0x0101], // Ā ā
- [0x0112, 0x0113], // Ē ē
- [0x012a, 0x012b], // Ī ī
- [0x014c, 0x014d], // Ō ō
- [0x016a, 0x016b], // Ū ū
-];
-pub const SMART_QUOTE_RANGES: [[u32; 2]; 2] = [
- [0x2018, 0x2019], // ‘ ’
- [0x201C, 0x201D], // “ ”
-];
-
-// // pub const FULL_LATIN_RANGES = [
-// // [0x0001-0x007F],
-// // [0x0080-0x00FF],
-// // [0x0100-0x017F],
-// // [0x0180-0x024F],
-// // ];
-
-pub const JA_PUNCTUATION_RANGES: [[u32; 2]; 8] = [
- CJK_SYMBOLS_PUNCTUATION,
- KANA_PUNCTUATION,
- KATAKANA_PUNCTUATION,
- ZENKAKU_PUNCTUATION_1,
- ZENKAKU_PUNCTUATION_2,
- ZENKAKU_PUNCTUATION_3,
- ZENKAKU_PUNCTUATION_4,
- ZENKAKU_SYMBOLS_CURRENCY,
-];
-
-pub const KANA_RANGES: [[u32; 2]; 4] = [
- // const KANA_RANGES = [
- HIRAGANA_CHARS,
- KATAKANA_CHARS,
- KANA_PUNCTUATION,
- HANKAKU_KATAKANA,
-];
-
-lazy_static! {
- /// All Japanese unicode start and end ranges
- /// Includes full-width punctuation and number ranges.
- pub static ref JAPANESE_RANGES: Vec<[u32; 2]> = {
- let mut m = vec![ZENKAKU_UPPERCASE, ZENKAKU_LOWERCASE, ZENKAKU_NUMBERS, COMMON_CJK, RARE_CJK,];
- m.extend(KANA_RANGES);
- m.extend(JA_PUNCTUATION_RANGES);
- m
- };
-
- /// Basic Latin unicode regex, for determining Romaji + Hepburn romanisation
- /// Includes upper/lowercase long vowels like "ā, ī, ū, ē, ō"
- pub static ref ROMAJI_RANGES: Vec<[u32; 2]> = {
- let mut m = vec![MODERN_ENGLISH,];
- m.extend(HEPBURN_MACRON_RANGES);
- m
- };
- pub static ref EN_PUNCTUATION_RANGES: Vec<[u32; 2]> = {
- let mut m = vec![[0x20, 0x2F], [0x3A, 0x3F], [0x5B, 0x60], [0x7B, 0x7E],];
- m.extend(SMART_QUOTE_RANGES);
- m
- };
-
-}
-
-pub const UPPERCASE_START: u32 = 0x41;
-pub const UPPERCASE_END: u32 = 0x5A;
-pub const HIRAGANA_START: u32 = 0x3041;
-pub const HIRAGANA_END: u32 = 0x3096;
-pub const KATAKANA_START: u32 = 0x30A1;
-pub const KATAKANA_END: u32 = 0x30FC;
-pub const PROLONGED_SOUND_MARK: u32 = 0x30FC;
-pub const KANA_SLASH_DOT: u32 = 0x30FB;
diff --git a/wana_kana_rust/src/is_hiragana.rs b/wana_kana_rust/src/is_hiragana.rs
deleted file mode 100644
index 54c99a3..0000000
--- a/wana_kana_rust/src/is_hiragana.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-use crate::utils::is_char_hiragana::*;
-
-/// Test if all chars of `input` are [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
-pub fn is_hiragana(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_hiragana)
-}
-
-#[test]
-fn check_is_hiragana() {
- assert_eq!(is_hiragana("げーむ"), true);
- assert_eq!(is_hiragana("A"), false);
- assert_eq!(is_hiragana("あア"), false);
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_hiragana(""), false);
- }
- #[test]
- fn あ_is_hiragana() {
- assert_eq!(is_hiragana("あ"), true);
- }
- #[test]
- fn ああ_is_hiragana() {
- assert_eq!(is_hiragana("ああ"), true);
- }
- #[test]
- fn ア_is_not_hiragana() {
- assert_eq!(is_hiragana("ア"), false);
- }
- #[test]
- fn a_is_not_hiragana() {
- assert_eq!(is_hiragana("A"), false);
- }
- #[test]
- fn あア_is_not_hiragana() {
- assert_eq!(is_hiragana("あア"), false);
- }
- #[test]
- fn ignores_long_dash_in_hiragana() {
- assert_eq!(is_hiragana("げーむ"), true);
- }
-}
diff --git a/wana_kana_rust/src/is_japanese.rs b/wana_kana_rust/src/is_japanese.rs
deleted file mode 100644
index f99dfc3..0000000
--- a/wana_kana_rust/src/is_japanese.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-#[cfg(feature = "enable_regex")]
-use regex::Regex;
-
-use crate::utils::is_char_japanese::*;
-
-/// Test if `input` only includes [Kanji](https://en.wikipedia.org/wiki/Kanji), [Kana](https://en.wikipedia.org/wiki/Kana), zenkaku punctuation, japanese symbols and japanese numbers.
-pub fn is_japanese(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_japanese)
-}
-
-#[cfg(feature = "enable_regex")]
-/// Checks if all chars are in the japanese unicode ranges or match the provided regex
-pub fn is_japanese_with_whitelist(input: &str, allowed: Option<&Regex>) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(|char| {
- let is_jap = is_char_japanese(char);
- if !is_jap {
- if let Some(allowed) = allowed {
- return allowed.is_match(input);
- }
- }
- is_jap
- })
-}
diff --git a/wana_kana_rust/src/is_kana.rs b/wana_kana_rust/src/is_kana.rs
deleted file mode 100644
index 0e83ed7..0000000
--- a/wana_kana_rust/src/is_kana.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-use crate::utils::is_char_kana::*;
-
-/// Test if all chars of `input` are [Kana](https://en.wikipedia.org/wiki/Kana) ([Katakana](https://en.wikipedia.org/wiki/Katakana) and/or [Hiragana](https://en.wikipedia.org/wiki/Hiragana))
-pub fn is_kana(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_kana)
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_kana(""), false);
- }
- #[test]
- fn あ_is_kana() {
- assert_eq!(is_kana("あ"), true);
- }
- #[test]
- fn ア_is_kana() {
- assert_eq!(is_kana("ア"), true);
- }
- #[test]
- fn あア_is_kana() {
- assert_eq!(is_kana("あア"), true);
- }
- #[test]
- fn a_is_not_kana() {
- assert_eq!(is_kana("A"), false);
- }
- #[test]
- fn あaア_is_not_kana() {
- assert_eq!(is_kana("あAア"), false);
- }
- #[test]
- fn ignores_long_dash_in_mixed_kana() {
- assert_eq!(is_kana("アーあ"), true);
- }
-}
diff --git a/wana_kana_rust/src/is_kanji.rs b/wana_kana_rust/src/is_kanji.rs
deleted file mode 100644
index 8b2f431..0000000
--- a/wana_kana_rust/src/is_kanji.rs
+++ /dev/null
@@ -1,83 +0,0 @@
-use crate::utils::is_char_kanji::*;
-
-/// Test if all chars of `input` are [Kanji](https://en.wikipedia.org/wiki/Kanji) ([Japanese CJK ideographs](https://en.wikipedia.org/wiki/CJK_Unified_Ideographs))
-#[inline]
-pub fn is_kanji(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_kanji)
-}
-
-/// Test if any chars of `input` are [Kanji](https://en.wikipedia.org/wiki/Kanji) ([Japanese CJK ideographs](https://en.wikipedia.org/wiki/CJK_Unified_Ideographs))
-#[inline]
-pub fn contains_kanji(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().any(is_char_kanji)
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_kanji(""), false);
- assert_eq!(contains_kanji(""), false);
- }
-
- #[test]
- fn 勢い_contains_kanji() {
- assert_eq!(contains_kanji("勢い"), true);
- }
- #[test]
- fn hello_contains_not_kanji() {
- assert_eq!(contains_kanji("hello"), false);
- }
- #[test]
- fn 切腹_is_kanji() {
- assert_eq!(is_kanji("切腹"), true);
- }
- #[test]
- fn 刀_is_kanji() {
- assert_eq!(is_kanji("刀"), true);
- }
- #[test]
- fn emoji_are_not_kanji() {
- assert_eq!(is_kanji("🐸"), false);
- }
- #[test]
- fn あ_is_not_kanji() {
- assert_eq!(is_kanji("あ"), false);
- }
- #[test]
- fn ア_is_not_kanji() {
- assert_eq!(is_kanji("ア"), false);
- }
- #[test]
- fn あア_is_not_kanji() {
- assert_eq!(is_kanji("あア"), false);
- }
- #[test]
- fn a_is_not_kanji() {
- assert_eq!(is_kanji("A"), false);
- }
- #[test]
- fn あaア_is_not_kanji() {
- assert_eq!(is_kanji("あAア"), false);
- }
- #[test]
- fn number_with_kanj_is_not_kanji1() {
- assert_eq!(is_kanji("12隻"), false);
- }
- #[test]
- fn number_with_kanj_is_not_kanji2() {
- assert_eq!(is_kanji("12隻"), false);
- }
- #[test]
- fn kanji_with_dot_is_not_kanji() {
- assert_eq!(is_kanji("隻。"), false);
- }
-}
diff --git a/wana_kana_rust/src/is_katakana.rs b/wana_kana_rust/src/is_katakana.rs
deleted file mode 100644
index fb9c599..0000000
--- a/wana_kana_rust/src/is_katakana.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-use crate::utils::is_char_katakana::*;
-
-/// Test if all chars of `input` are [Katakana](https://en.wikipedia.org/wiki/Katakana)
-pub fn is_katakana(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_katakana)
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_katakana(""), false);
- }
- #[test]
- fn アア_is_katakana() {
- assert_eq!(is_katakana("アア"), true);
- }
- #[test]
- fn ア_is_katakana() {
- assert_eq!(is_katakana("ア"), true);
- }
- #[test]
- fn あ_is_not_katakana() {
- assert_eq!(is_katakana("あ"), false);
- }
- #[test]
- fn a_is_not_katakana() {
- assert_eq!(is_katakana("A"), false);
- }
- #[test]
- fn あア_is_not_katakana() {
- assert_eq!(is_katakana("あア"), false);
- }
- #[test]
- fn ignores_long_dash_in_katakana() {
- assert_eq!(is_katakana("ゲーム"), true);
- }
-}
diff --git a/wana_kana_rust/src/is_mixed.rs b/wana_kana_rust/src/is_mixed.rs
deleted file mode 100644
index dc3fb7c..0000000
--- a/wana_kana_rust/src/is_mixed.rs
+++ /dev/null
@@ -1,77 +0,0 @@
-use crate::utils::is_char_hiragana::is_char_hiragana;
-use crate::utils::is_char_kanji::is_char_kanji;
-use crate::utils::is_char_katakana::is_char_katakana;
-use crate::utils::is_char_romaji::is_char_romaji;
-
-#[inline]
-/// Test if `input` contains a mix of [Romaji](https://en.wikipedia.org/wiki/Romaji) and [Kana](https://en.wikipedia.org/wiki/Kana).
-/// [Kanji](https://en.wikipedia.org/wiki/Kanji) is ignored
-pub fn is_mixed(input: &str) -> bool {
- is_mixed_pass_kanji(input, true)
-}
-
-/// Test if `input` contains a mix of [Romaji](https://en.wikipedia.org/wiki/Romaji) and [Kana](https://en.wikipedia.org/wiki/Kana)
-#[inline]
-pub fn is_mixed_pass_kanji(input: &str, pass_kanji: bool) -> bool {
- let mut has_kanji = false;
- if !pass_kanji {
- has_kanji = input.chars().any(is_char_kanji);
- }
- (input.chars().any(is_char_hiragana) || input.chars().any(is_char_katakana))
- && input.chars().any(is_char_romaji)
- && !has_kanji
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_mixed(""), false);
- }
- #[test]
- fn aア_is_mixed() {
- assert_eq!(is_mixed("Aア"), true);
- }
- #[test]
- fn aあ_is_mixed() {
- assert_eq!(is_mixed("Aあ"), true);
- }
- #[test]
- fn aあア_is_mixed() {
- assert_eq!(is_mixed("Aあア"), true);
- }
- #[test]
- fn number_2あア_is_not_mixed() {
- assert_eq!(is_mixed("2あア"), false);
- }
- #[test]
- fn お腹a_is_mixed() {
- assert_eq!(is_mixed("お腹A"), true);
- }
- #[test]
- fn お腹a_is_not_mixed_when_pass_kanji_false() {
- assert_eq!(is_mixed_pass_kanji("お腹A", false), false);
- }
- #[test]
- fn お腹_is_not_mixed() {
- assert_eq!(is_mixed("お腹"), false);
- }
- #[test]
- fn 腹_is_not_mixed() {
- assert_eq!(is_mixed("腹"), false);
- }
- #[test]
- fn a_is_not_mixed() {
- assert_eq!(is_mixed("A"), false);
- }
- #[test]
- fn あ_is_not_mixed() {
- assert_eq!(is_mixed("あ"), false);
- }
- #[test]
- fn ア_is_not_mixed() {
- assert_eq!(is_mixed("ア"), false);
- }
-}
diff --git a/wana_kana_rust/src/is_romaji.rs b/wana_kana_rust/src/is_romaji.rs
deleted file mode 100644
index 3e56a7a..0000000
--- a/wana_kana_rust/src/is_romaji.rs
+++ /dev/null
@@ -1,101 +0,0 @@
-#[cfg(feature = "enable_regex")]
-use regex::Regex;
-
-use crate::utils::is_char_romaji::*;
-
-/// Test if every char in `input` is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization))
-pub fn is_romaji(input: &str) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(is_char_romaji)
-}
-
-#[cfg(feature = "enable_regex")]
-/// Test if every char in `input` is [Romaji](https://en.wikipedia.org/wiki/Romaji) or matches the
-/// provided regex
-pub fn is_romaji_with_whitelist(input: &str, allowed: Option<&Regex>) -> bool {
- if input.is_empty() {
- return false;
- }
- input.chars().all(|char| {
- let is_jap = is_char_romaji(char);
- if !is_jap {
- if let Some(allowed) = allowed {
- return allowed.is_match(input);
- }
- }
- is_jap
- })
-}
-
-#[test]
-fn check_is_romaji() {
- assert_eq!(is_romaji("Tōkyō and Ōsaka"), true);
- assert_eq!(is_romaji("12a*b&c-d"), true);
- assert_eq!(is_romaji("あアA"), false);
- assert_eq!(is_romaji("お願い"), false);
- assert_eq!(is_romaji("a!b&cーd"), false);
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(is_romaji(""), false);
-
- #[cfg(feature = "enable_regex")]
- assert_eq!(is_romaji_with_whitelist("", None), false);
- }
- #[test]
- fn a_is_romaji() {
- assert_eq!(is_romaji("A"), true);
- }
- #[test]
- fn x_yz_is_romaji() {
- assert_eq!(is_romaji("xYz"), true);
- }
- #[test]
- fn tōkyō_and_ōsaka_is_romaji() {
- assert_eq!(is_romaji("Tōkyō and Ōsaka"), true);
- }
- #[test]
- fn あアa_is_not_romaji() {
- assert_eq!(is_romaji("あアA"), false);
- }
- #[test]
- fn お願い_is_not_romaji() {
- assert_eq!(is_romaji("お願い"), false);
- }
- #[test]
- fn 熟成_is_not_romaji() {
- assert_eq!(is_romaji("熟成"), false);
- }
- #[test]
- fn passes_latin_punctuation() {
- assert_eq!(is_romaji("a*b&c-d"), true);
- }
- #[test]
- fn passes_latin_numbers() {
- assert_eq!(is_romaji("0123456789"), true);
- }
- #[test]
- fn fails_zenkaku_punctuation() {
- assert_eq!(is_romaji("a!b&cーd"), false);
- }
- #[test]
- fn fails_zenkaku_latin() {
- assert_eq!(is_romaji("hello"), false);
- }
-
- #[cfg(feature = "enable_regex")]
- #[test]
- fn accepts_optional_allowed_chars() {
- assert_eq!(
- is_romaji_with_whitelist("a!b&cーd", Some(&Regex::new(r"[!ー]").unwrap())),
- true
- );
- }
-}
diff --git a/wana_kana_rust/src/lib.rs b/wana_kana_rust/src/lib.rs
deleted file mode 100644
index 63a3c9f..0000000
--- a/wana_kana_rust/src/lib.rs
+++ /dev/null
@@ -1,100 +0,0 @@
-//! # ワナカナ <--> WanaKana <--> わなかな
-//!
-//! Utility library for checking and converting between Japanese characters -
-//! Hiragana, Katakana - and Romaji (Ported from )
-//!
-//! # Conversions
-//!
-//! We provide the [`ConvertJapanese`] Trait, which is implemented for `&str`,
-//! that allows the same conversions as mentioned above, by calling the
-//! corresponding method directly on the `&str`.
-//!
-//! ```
-//! use wana_kana::ConvertJapanese;
-//! // to kana
-//! assert_eq!("o".to_kana(), "お");
-//! assert_eq!("ona".to_kana(), "おな");
-//! assert_eq!("onaji".to_kana(), "おなじ");
-//! assert_eq!("onaji BUTTSUUJI".to_kana(), "おなじ ブッツウジ");
-//! assert_eq!("ONAJI buttsuuji".to_kana(), "オナジ ぶっつうじ");
-//! assert_eq!("座禅‘zazen’スタイル".to_kana(), "座禅「ざぜん」スタイル");
-//! // to hiragana
-//! assert_eq!("toukyou,オオサカ".to_hiragana(), "とうきょう、おおさか");
-//! // to katakana
-//! assert_eq!("toukyou,おおさか".to_katakana(), "トウキョウ、オオサカ");
-//! // to romaji
-//! assert_eq!("ひらがな カタカナ".to_romaji(), "hiragana katakana");
-//! ```
-//!
-//! # Checks
-//! To check whether a string is Japanese, romaji, kana, etc check the [`IsJapaneseStr`] trait.
-//! There are also functions to check a single `char` in the is [`IsJapaneseChar`] trait.
-//!
-//! ```
-//! use wana_kana::IsJapaneseStr;
-//! assert_eq!("げーむ".is_hiragana(), true);
-//! assert_eq!("ア".is_kana(), true);
-//! assert_eq!("Tōkyō and Ōsaka".is_romaji(), true);
-//! assert_eq!("切腹".is_kanji(), true);
-//! assert_eq!("Aあア".is_mixed(), true);
-//! assert_eq!("勢い".contains_kanji(), true);
-//! ```
-//!
-//! # Tokenize
-//!
-//! [`tokenize`] Splits input into array of strings separated by opinionated TokenType.
-
-#![doc(test(attr(allow(unused_variables), deny(warnings))))]
-#![cfg_attr(docsrs, feature(doc_cfg))]
-#![warn(missing_docs)]
-
-#[macro_use]
-extern crate lazy_static;
-
-#[cfg(feature = "enable_regex")]
-extern crate regex;
-
-#[macro_use]
-#[allow(missing_docs)]
-pub mod utils;
-
-pub(crate) mod is_hiragana;
-pub(crate) mod is_japanese;
-pub(crate) mod is_kana;
-pub(crate) mod is_kanji;
-pub(crate) mod is_katakana;
-pub(crate) mod is_mixed;
-pub(crate) mod is_romaji;
-
-pub(crate) mod to_hiragana;
-pub(crate) mod to_kana;
-pub(crate) mod to_kana_node_tree;
-pub(crate) mod to_katakana;
-pub(crate) mod to_romaji;
-pub(crate) mod to_romaji_node_tree;
-
-#[cfg_attr(docsrs, doc(cfg(feature = "tokenize")))]
-#[cfg(feature = "tokenize")]
-pub mod tokenize;
-#[cfg_attr(docsrs, doc(cfg(feature = "tokenize")))]
-#[cfg(feature = "tokenize")]
-pub mod trim_okurigana;
-
-#[allow(missing_docs)]
-pub mod constants;
-mod options;
-
-pub use crate::options::Options;
-
-pub mod traits;
-pub use traits::{ConvertJapanese, IsJapaneseChar, IsJapaneseStr};
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_regression_11() {
- assert_eq!("シークヮーサー".to_hiragana(), "しいくゎあさあ");
- }
-}
diff --git a/wana_kana_rust/src/options.rs b/wana_kana_rust/src/options.rs
deleted file mode 100644
index 7993057..0000000
--- a/wana_kana_rust/src/options.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-#[derive(Debug, Default, Clone)]
-/// Options to set.
-pub struct Options {
- /// Set to true to use obsolete characters, such as ゐ and ゑ.
- pub use_obsolete_kana: bool,
-
- /// Set to true to pass romaji when using mixed syllabaries with to_katakana() or to_hiragana()
- /// toHiragana('only convert the katakana: ヒラガナ', { passRomaji: true })
- /// => "only convert the katakana: ひらがな"
- pub pass_romaji: bool,
-
- /// Set to true to convert katakana to uppercase using to_romaji()
- /// to_romaji('ひらがな カタカナ', { upcaseKatakana: true })
- pub upcase_katakana: bool,
-
- /// Set to true to handle conversion while it is being typed
- pub imemode: bool,
-}
diff --git a/wana_kana_rust/src/to_hiragana.rs b/wana_kana_rust/src/to_hiragana.rs
deleted file mode 100644
index 09045b3..0000000
--- a/wana_kana_rust/src/to_hiragana.rs
+++ /dev/null
@@ -1,163 +0,0 @@
-use crate::is_mixed::*;
-use crate::is_romaji::*;
-use crate::options::Options;
-use crate::utils::is_char_english_punctuation::is_char_english_punctuation;
-use crate::utils::katakana_to_hiragana::*;
-use crate::utils::romaji_to_hiragana::romaji_to_hiragana;
-
-#[inline]
-/// Convert input to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
-pub fn to_hiragana(input: &str) -> String {
- to_hiragana_with_opt(input, Options::default())
-}
-
-/// Convert input to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
-pub fn to_hiragana_with_opt(input: &str, options: Options) -> String {
- let config = options;
- if config.pass_romaji {
- katakana_to_hiragana(input)
- } else if is_mixed(input) {
- let romaji = katakana_to_hiragana(input);
- romaji_to_hiragana(&romaji, config)
- } else if is_romaji(input)
- || input
- .chars()
- .next()
- .map(is_char_english_punctuation)
- .unwrap_or(false)
- {
- // TODO: is it correct to check only the first char (see
- // src\utils\isCharEnglishPunctuation.js)
- romaji_to_hiragana(input, config)
- } else {
- katakana_to_hiragana(input)
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- fn with_obsolete_kana() -> Options {
- Options {
- use_obsolete_kana: true,
- ..Default::default()
- }
- }
-
- #[test]
- fn sane_defaults() {
- assert_eq!(to_hiragana(""), "");
- }
-
- #[test]
- fn quick_brown_fox_romaji_to_hiragana() {
- // https://en.wikipedia.org/wiki/Iroha
- // Even the colorful fragrant flowers'
- assert_eq!(
- to_hiragana_with_opt("IROHANIHOHETO", with_obsolete_kana()),
- "いろはにほへと"
- );
- // die sooner or later.'
- assert_eq!(
- to_hiragana_with_opt("CHIRINURUWO", with_obsolete_kana()),
- "ちりぬるを"
- );
- // Us who live in this world'
- assert_eq!(
- to_hiragana_with_opt("WAKAYOTARESO", with_obsolete_kana()),
- "わかよたれそ"
- );
- // cannot live forever, either.'
- assert_eq!(
- to_hiragana_with_opt("TSUNENARAMU", with_obsolete_kana()),
- "つねならむ"
- );
- // This transient mountain with shifts and changes,'
- assert_eq!(
- to_hiragana_with_opt("UWINOOKUYAMA", with_obsolete_kana()),
- "うゐのおくやま"
- );
- // today we are going to overcome, and reach the world of enlightenment.'
- assert_eq!(
- to_hiragana_with_opt("KEFUKOETE", with_obsolete_kana()),
- "けふこえて"
- );
- // We are not going to have meaningless dreams'
- assert_eq!(
- to_hiragana_with_opt("ASAKIYUMEMISHI", with_obsolete_kana()),
- "あさきゆめみし"
- );
- // nor become intoxicated with the fake world anymore.'
- assert_eq!(
- to_hiragana_with_opt("WEHIMOSESU", with_obsolete_kana()),
- "ゑひもせす"
- );
- // *not in iroha*
- assert_eq!(to_hiragana("NLTU"), "んっ");
- }
-
- mod use_obsolete_kana {
- use super::*;
- #[test]
- fn use_obsolete_kana_is_false_by_default() {
- assert_eq!(to_hiragana("wi"), "うぃ");
- }
- #[test]
- fn wi_ゐ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_hiragana_with_opt("wi", with_obsolete_kana()), "ゐ");
- }
- #[test]
- fn we_ゑ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_hiragana_with_opt("we", with_obsolete_kana()), "ゑ");
- }
- #[test]
- fn wi_うぃ_when_use_obsolete_kana_is_false() {
- assert_eq!(
- to_hiragana_with_opt(
- "wi",
- Options {
- use_obsolete_kana: false,
- ..Default::default()
- }
- ),
- "うぃ"
- );
- }
- }
-
- mod pass_romaji {
- use super::*;
- #[test]
- fn false_by_default() {
- assert_eq!(to_hiragana("only カナ"), "おんly かな");
- assert_eq!(
- to_hiragana_with_opt(
- "only カナ",
- Options {
- pass_romaji: true,
- ..Default::default()
- }
- ),
- "only かな"
- );
- }
- }
-
- mod katakana_choōnpu {
- use super::*;
- #[test]
- fn converts_to_hiragana_long_vowels() {
- assert_eq!(to_hiragana("スーパー"), "すうぱあ");
- assert_eq!(to_hiragana("バンゴー"), "ばんごう");
- }
- }
-
- #[test]
- fn mixed_input() {
- assert_eq!(
- to_hiragana("#22 22漢字、toukyou, オオサカ"),
- "#22 22漢字、とうきょう、 おおさか"
- );
- }
-}
diff --git a/wana_kana_rust/src/to_kana.rs b/wana_kana_rust/src/to_kana.rs
deleted file mode 100644
index c3f32d9..0000000
--- a/wana_kana_rust/src/to_kana.rs
+++ /dev/null
@@ -1,201 +0,0 @@
-use crate::options::Options;
-use crate::to_kana_node_tree::{
- TO_KANA_NODE_TREE, TO_KANA_NODE_TREE_IMEMODE, TO_KANA_NODE_TREE_OBSOLETE,
-};
-use crate::utils::hiragana_to_katakana::*;
-
-#[inline]
-/// Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Kana](https://en.wikipedia.org/wiki/Kana), lowercase text will result in [Hiragana](https://en.wikipedia.org/wiki/Hiragana) and uppercase text will result in [Katakana](https://en.wikipedia.org/wiki/Katakana).
-pub fn to_kana(input: &str) -> String {
- to_kana_with_opt(input, Options::default())
-}
-
-/// Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Kana](https://en.wikipedia.org/wiki/Kana), lowercase text will result in [Hiragana](https://en.wikipedia.org/wiki/Hiragana) and uppercase text will result in [Katakana](https://en.wikipedia.org/wiki/Katakana).
-pub fn to_kana_with_opt(input: &str, options: Options) -> String {
- let chars = input.chars().collect::>();
- // Final output array
- let mut ouput = String::with_capacity(input.len());
- let len = chars.len();
- // Position in the string that is being evaluated
- let mut curr_pos = 0;
-
- while curr_pos != len {
- let result = if options.use_obsolete_kana {
- TO_KANA_NODE_TREE_OBSOLETE.get(&chars[curr_pos..])
- } else if options.imemode {
- TO_KANA_NODE_TREE_IMEMODE.get(&chars[curr_pos..])
- } else {
- TO_KANA_NODE_TREE.get(&chars[curr_pos..])
- };
-
- // nothing found, pass through
- if result.1 == 0 {
- ouput.push(chars[curr_pos]);
- curr_pos += 1;
- } else {
- if chars[curr_pos..curr_pos + result.1]
- .iter()
- .all(|c| char::is_uppercase(*c))
- {
- ouput.push_str(&hiragana_to_katakana(result.0.unwrap()));
- } else {
- ouput.push_str(result.0.unwrap());
- }
- curr_pos += result.1;
- }
- }
-
- ouput
-}
-
-#[cfg(test)]
-mod tests {
- fn with_obsolete_kana() -> Options {
- Options {
- use_obsolete_kana: true,
- ..Default::default()
- }
- }
-
- fn with_ime_mode() -> Options {
- Options {
- imemode: true,
- ..Default::default()
- }
- }
-
- #[allow(dead_code)]
- pub const JA_PUNC: [char; 18] = [
- '!', '?', '。', ':', '・', '、', '〜', 'ー', '「', '」', '『', '』', '[', ']', '(',
- ')', '{', '}',
- ];
-
- #[allow(dead_code)]
- pub const EN_PUNC: [char; 18] = [
- '!', '?', '.', ':', '/', ',', '~', '-', '‘', '’', '“', '”', '[', ']', '(', ')', '{', '}',
- ];
-
- use super::*;
-
- #[test]
- fn sane_defaults() {
- assert_eq!(to_kana(""), "");
- }
- #[test]
- fn uppercase_ist_katakana_defaults() {
- assert_eq!(to_kana("WANAKANA"), "ワナカナ");
- }
-
- #[test]
- fn lowercase_characters_are_transliterated_to_hiragana() {
- assert_eq!(to_kana("onaji"), "おなじ");
- }
-
- #[test]
- fn lowercase_with_double_consonants_and_double_vowels_are_transliterated_to_hiragana() {
- assert_eq!(to_kana("buttsuuji"), "ぶっつうじ");
- }
-
- #[test]
- fn uppercase_characters_are_transliterated_to_katakana() {
- assert_eq!(to_kana("ONAJI"), "オナジ");
- }
-
- #[test]
- fn uppercase_with_double_consonants_and_double_vowels_are_transliterated_to_katakana() {
- assert_eq!(to_kana("BUTTSUUJI"), "ブッツウジ");
- }
-
- #[test]
- fn wani_kani_わにかに_mixed_case_returns_hiragana_katakana_only_if_all_letters_of_mora_are_uppercased(
- ) {
- assert_eq!(to_kana("WaniKani"), "わにかに");
- }
-
- #[test]
- fn non_romaji_will_be_passed_through() {
- assert_eq!(
- to_kana("ワニカニ AiUeO 鰐蟹 12345 @#$%"),
- "ワニカニ アいウえオ 鰐蟹 12345 @#$%"
- );
- }
-
- #[test]
- fn it_handles_mixed_syllabaries() {
- assert_eq!(to_kana("座禅‘zazen’スタイル"), "座禅「ざぜん」スタイル");
- }
-
- #[test]
- fn will_convert_short_to_long_dashes() {
- assert_eq!(to_kana("batsuge-mu"), "ばつげーむ");
- }
-
- #[test]
- fn will_convert_punctuation_but_pass_through_spaces() {
- let en: String = EN_PUNC
- .iter()
- .map(|e| e.to_string())
- .collect::>()
- .join(" ");
- let ja = JA_PUNC
- .iter()
- .map(|e| e.to_string())
- .collect::>()
- .join(" ");
- assert_eq!(to_kana(&en), ja)
- }
-
- mod without_ime_mode {
- use super::*;
- #[test]
- fn solo_ns_are_transliterated_regardless_of_following_chars() {
- assert_eq!(to_kana("n"), "ん");
- assert_eq!(to_kana("shin"), "しん");
- }
- #[test]
- fn double_ns_are_transliterated_to_double_ん() {
- assert_eq!(to_kana("nn"), "んん");
- }
- }
-
- mod with_ime_mode {
- use super::*;
- #[test]
- fn solo_ns_are_not_transliterated_unless_chars_follow() {
- assert_eq!(to_kana_with_opt("n", with_ime_mode()), "n");
- assert_eq!(to_kana_with_opt("shin", with_ime_mode()), "しn");
- assert_eq!(to_kana_with_opt("shinyou", with_ime_mode()), "しにょう");
- assert_eq!(to_kana_with_opt("shin'you", with_ime_mode()), "しんよう");
- assert_eq!(to_kana_with_opt("shin you", with_ime_mode()), "しんよう");
- }
- #[test]
- fn double_ns_are_transliterated_to_singleん() {
- assert_eq!(to_kana_with_opt("nn", with_ime_mode()), "ん");
- }
- }
-
- mod use_obsolete_kana {
- use super::*;
- #[test]
- fn use_obsolete_kana_is_false_by_default() {
- assert_eq!(to_kana("wi"), "うぃ");
- assert_eq!(to_kana("WI"), "ウィ");
- }
- #[test]
- fn wi_ゐ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_kana_with_opt("wi", with_obsolete_kana()), "ゐ");
- }
- #[test]
- fn we_ゑ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_kana_with_opt("we", with_obsolete_kana()), "ゑ");
- }
- #[test]
- fn wi_ヰ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_kana_with_opt("WI", with_obsolete_kana()), "ヰ");
- }
- #[test]
- fn we_ヱ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_kana_with_opt("WE", with_obsolete_kana()), "ヱ");
- }
- }
-}
diff --git a/wana_kana_rust/src/to_kana_node_tree.rs b/wana_kana_rust/src/to_kana_node_tree.rs
deleted file mode 100644
index c471df3..0000000
--- a/wana_kana_rust/src/to_kana_node_tree.rs
+++ /dev/null
@@ -1,4861 +0,0 @@
-#[derive(Debug, Clone)]
-pub(crate) struct Node {
- pub transitions: Vec<(char, Node)>,
- pub output: Option<&'static str>,
-}
-
-impl Node {
- pub(crate) fn get<'a>(&self, chars: &'a [char]) -> (Option<&'static str>, usize) {
- let mut i = 0;
- let mut curr_node = self;
- for char in chars.iter() {
- if let Some(trans_node) = curr_node.find_transition_node(char.to_ascii_lowercase()) {
- curr_node = trans_node;
- } else {
- break;
- }
- i += 1;
- }
-
- if let Some(_output) = curr_node.output {
- (curr_node.output, i)
- } else {
- (None, 0)
- }
- }
-
- pub(crate) fn find_transition_node(&self, char: char) -> Option<&Node> {
- self.transitions.iter().find(|&t| t.0 == char).map(|t| &t.1)
- // self.transitions.binary_search_by_key(&char, |t|
- // t.0).ok().map(|index|&self.transitions[index].1)
- }
-
- fn find_transition_mut(&mut self, char: char) -> Option<&mut (char, Node)> {
- self.transitions.iter_mut().find(|t| t.0 == char)
- }
-
- fn sort(&mut self) {
- self.transitions.sort_by_key(|el| el.0);
- for el in &mut self.transitions {
- el.1.sort();
- }
- }
-}
-
-#[test]
-fn test_node_tree() {
- let chars = ['a'];
- assert_eq!(TO_KANA_NODE_TREE.get(&chars).0, Some("あ"));
-}
-
-lazy_static! {
- pub(crate) static ref TO_KANA_NODE_TREE: Node = {
- let transitions = vec![
- (
- '!',
- Node {
- transitions: vec![],
- output: Some("!"),
- },
- ),
- (
- '(',
- Node {
- transitions: vec![],
- output: Some("("),
- },
- ),
- (
- ')',
- Node {
- transitions: vec![],
- output: Some(")"),
- },
- ),
- (
- ',',
- Node {
- transitions: vec![],
- output: Some("、"),
- },
- ),
- (
- '-',
- Node {
- transitions: vec![],
- output: Some("ー"),
- },
- ),
- (
- '.',
- Node {
- transitions: vec![],
- output: Some("。"),
- },
- ),
- (
- '/',
- Node {
- transitions: vec![],
- output: Some("・"),
- },
- ),
- (
- ':',
- Node {
- transitions: vec![],
- output: Some(":"),
- },
- ),
- (
- '?',
- Node {
- transitions: vec![],
- output: Some("?"),
- },
- ),
- (
- '[',
- Node {
- transitions: vec![],
- output: Some("["),
- },
- ),
- (
- ']',
- Node {
- transitions: vec![],
- output: Some("]"),
- },
- ),
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("あ"),
- },
- ),
- (
- 'b',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ば"),
- },
- ),
- (
- 'b',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っば"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っべ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っび"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぼ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぶ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っびゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っびぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っびぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っびょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っびゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("べ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("び"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぼ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぶ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("びゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("びぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("びぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("びょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("びゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'c',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("か"),
- },
- ),
- (
- 'c',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っか"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っけ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っち"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っちゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っき"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っこ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っく"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("け"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ち"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ちゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("き"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("こ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("く"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'd',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("だ"),
- },
- ),
- (
- 'd',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っだ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っで"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っでゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っでぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っでぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っでょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っでゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぢ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っど"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っづ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っどぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っどぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っどぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っどぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っどぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っぢゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぢぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぢぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぢょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぢゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("で"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("でゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("でぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("でぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("でょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("でゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぢ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ど"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("づ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("どぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("どぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("どぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("どぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("どぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぢゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぢぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぢぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぢょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぢゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("え"),
- },
- ),
- (
- 'f',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ふぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ふぇ"),
- },
- ),
- (
- 'f',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っふぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っふぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っふぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っふ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っふぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っふぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っふぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っふぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っふゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っふぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っふょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っふゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ふぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ふ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ふぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ふぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ふぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ふぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ふゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ふぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ふぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ふょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ふゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'g',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("が"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("げ"),
- },
- ),
- (
- 'g',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っが"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っげ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぎ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っご"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぐ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っぐぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぐぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぐぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぐぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぐぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っぎゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぎぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぎぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぎょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぎゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぎ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ご"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぐ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぐぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぐぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぐぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぐぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぐぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぎゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぎぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぎぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぎょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぎゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("は"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("へ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っは"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っへ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っひ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っほ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っふ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っひゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っひぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っひぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っひょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っひゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ひ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ほ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ふ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ひゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ひぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ひぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ひょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ひゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("い"),
- },
- ),
- (
- 'j',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("じゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("じぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("じ"),
- },
- ),
- (
- 'j',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っじゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っじぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っじ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っじょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っじゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っじゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っじぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っじぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っじょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っじゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("じょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("じゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("じゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("じぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("じぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("じょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("じゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'k',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("か"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("け"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("き"),
- },
- ),
- (
- 'k',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っか"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っけ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っき"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っこ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っく"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![(
- 'a',
- Node {
- transitions: vec![],
- output: Some("っくぁ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っきゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っきぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っきぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っきょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っきゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("こ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("く"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![(
- 'a',
- Node {
- transitions: vec![],
- output: Some("くぁ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("きゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("きぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("きぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("きょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("きゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'l',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぁ"),
- },
- ),
- (
- 'c',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ヵ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ヶ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぃ"),
- },
- ),
- (
- 'k',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ヵ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ヶ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぉ"),
- },
- ),
- (
- 't',
- Node {
- transitions: vec![
- (
- 's',
- Node {
- transitions: vec![(
- 'u',
- Node {
- transitions: vec![],
- output: Some("っ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぅ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![(
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゎ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'm',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ま"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("め"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("み"),
- },
- ),
- (
- 'm',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っま"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っめ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っみ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っも"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っむ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っみゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っみぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っみぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っみょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っみゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("も"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("む"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("みゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("みぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("みぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("みょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("みゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'n',
- Node {
- transitions: vec![
- (
- '\'',
- Node {
- transitions: vec![],
- output: Some("ん"),
- },
- ),
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("な"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ね"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("に"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("の"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぬ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("にゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("にぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("にぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("にょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("にゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: Some("ん"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("お"),
- },
- ),
- (
- 'p',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぱ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぺ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぴ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぽ"),
- },
- ),
- (
- 'p',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っぱ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぺ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぴ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぽ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぷ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っぴゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぴぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っぴぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぴょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っぴゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぷ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぴゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぴぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぴぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぴょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぴゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'q',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("くぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("くぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("くぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("くぉ"),
- },
- ),
- (
- 'q',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っくぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っくぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っくぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っくぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っくぅ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っくぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っくぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っくぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っくぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っくぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っくゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っくぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っくぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っくょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っくゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("くぅ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("くぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("くぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("くぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("くぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("くぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("くゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("くぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("くぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("くょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("くゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'r',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ら"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("れ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("り"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ろ"),
- },
- ),
- (
- 'r',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っら"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っれ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っり"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っろ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っる"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っりゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っりぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っりぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っりょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っりゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("る"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("りゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("りぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("りぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("りょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("りゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 's',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("さ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("せ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("しゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("しぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("し"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("しょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("しゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("しゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("しぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("しぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("しょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("しゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("し"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("そ"),
- },
- ),
- (
- 's',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っさ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っせ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っしゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っしぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っし"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っしょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っしゅ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っしゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っしぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っしぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っしょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っしゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っし"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っそ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っす"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っすぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っすぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っすぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っすぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っすぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っしゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っしぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っしぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っしょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っしゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("す"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("すぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("すぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("すぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("すぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("すぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("しゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("しぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("しぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("しょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("しゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 't',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("た"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("て"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("てゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("てぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("てぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("てょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("てゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ち"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("と"),
- },
- ),
- (
- 's',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("つぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("つぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("つぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("つぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("つ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 't',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("った"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("って"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ってゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ってぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ってぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ってょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ってゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っち"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っと"),
- },
- ),
- (
- 's',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っつぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っつぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っつぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っつぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っつ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っつ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っとぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っとぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っとぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っとぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っとぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("つ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("とぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("とぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("とぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("とぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("とぅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ちゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ちぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ちぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ちょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ちゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("う"),
- },
- ),
- (
- 'v',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゔぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ゔぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ゔぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ゔぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ゔ"),
- },
- ),
- (
- 'v',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っゔぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っゔぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っゔぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っゔぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っゔ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っゔゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っゔぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っゔぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っゔょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っゔゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゔゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ゔぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ゔぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ゔょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ゔゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("わ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("うぇ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("うぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("うぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("うぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("うぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("う"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("うぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("を"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("う"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っわ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っうぇ"),
- },
- ),
- (
- 'h',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っうぁ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っうぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っうぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っうぉ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っう"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っうぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っを"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っう"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'x',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ぁ"),
- },
- ),
- (
- 'c',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ヵ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ヶ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぃ"),
- },
- ),
- (
- 'k',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ヵ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ヶ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'n',
- Node {
- transitions: vec![],
- output: Some("ん"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぉ"),
- },
- ),
- (
- 't',
- Node {
- transitions: vec![
- (
- 's',
- Node {
- transitions: vec![(
- 'u',
- Node {
- transitions: vec![],
- output: Some("っ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ぅ"),
- },
- ),
- (
- 'w',
- Node {
- transitions: vec![(
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゎ"),
- },
- )],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("ぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("や"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("いぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("い"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("よ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ゆ"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っや"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っいぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っい"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っよ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っゆ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'z',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("ざ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("ぜ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("じ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("ぞ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("ず"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("じゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("じぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("じぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("じょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("じゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- (
- 'z',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っざ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っぜ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っじ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っぞ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っず"),
- },
- ),
- (
- 'y',
- Node {
- transitions: vec![
- (
- 'a',
- Node {
- transitions: vec![],
- output: Some("っじゃ"),
- },
- ),
- (
- 'e',
- Node {
- transitions: vec![],
- output: Some("っじぇ"),
- },
- ),
- (
- 'i',
- Node {
- transitions: vec![],
- output: Some("っじぃ"),
- },
- ),
- (
- 'o',
- Node {
- transitions: vec![],
- output: Some("っじょ"),
- },
- ),
- (
- 'u',
- Node {
- transitions: vec![],
- output: Some("っじゅ"),
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- ],
- output: None,
- },
- ),
- (
- '{',
- Node {
- transitions: vec![],
- output: Some("{"),
- },
- ),
- (
- '}',
- Node {
- transitions: vec![],
- output: Some("}"),
- },
- ),
- (
- '~',
- Node {
- transitions: vec![],
- output: Some("〜"),
- },
- ),
- (
- '‘',
- Node {
- transitions: vec![],
- output: Some("「"),
- },
- ),
- (
- '’',
- Node {
- transitions: vec![],
- output: Some("」"),
- },
- ),
- (
- '“',
- Node {
- transitions: vec![],
- output: Some("『"),
- },
- ),
- (
- '”',
- Node {
- transitions: vec![],
- output: Some("』"),
- },
- ),
- ];
- let mut tree = Node {
- transitions,
- output: None,
- };
- tree.sort();
- tree
- };
- pub(crate) static ref TO_KANA_NODE_TREE_OBSOLETE: Node = {
- let mut tree = TO_KANA_NODE_TREE.clone();
- let w = tree.find_transition_mut('w').unwrap();
- w.1.transitions.retain(|x| x.0 != 'i' && x.0 != 'e');
- w.1.transitions.push((
- 'i',
- Node {
- transitions: vec![],
- output: Some("ゐ"),
- },
- ));
- w.1.transitions.push((
- 'e',
- Node {
- transitions: vec![],
- output: Some("ゑ"),
- },
- ));
- tree.sort();
- tree
- };
- pub(crate) static ref TO_KANA_NODE_TREE_IMEMODE: Node = {
- let mut tree = TO_KANA_NODE_TREE.clone();
- let w = tree.find_transition_mut('n').unwrap();
- w.1.transitions.push((
- 'n',
- Node {
- transitions: vec![],
- output: Some("ん"),
- },
- ));
- w.1.transitions.push((
- ' ',
- Node {
- transitions: vec![],
- output: Some("ん"),
- },
- ));
- w.1.output = None;
- tree.sort();
- tree
- };
-}
diff --git a/wana_kana_rust/src/to_katakana.rs b/wana_kana_rust/src/to_katakana.rs
deleted file mode 100644
index b1fbeb3..0000000
--- a/wana_kana_rust/src/to_katakana.rs
+++ /dev/null
@@ -1,121 +0,0 @@
-use crate::is_mixed::*;
-use crate::is_romaji::*;
-use crate::options::Options;
-use crate::utils::hiragana_to_katakana::*;
-use crate::utils::romaji_to_hiragana::*;
-
-/// Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)
-pub fn to_katakana(input: &str) -> String {
- to_katakana_with_opt(input, Options::default())
-}
-/// Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)
-pub fn to_katakana_with_opt(input: &str, options: Options) -> String {
- let config = options;
- if config.pass_romaji {
- hiragana_to_katakana(input)
- } else if is_romaji(input) || is_mixed(input) {
- let romaji = romaji_to_hiragana(input, config);
- hiragana_to_katakana(&romaji)
- } else {
- hiragana_to_katakana(input)
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- fn with_obsolete_kana() -> Options {
- Options {
- use_obsolete_kana: true,
- ..Default::default()
- }
- }
-
- #[test]
- fn sane_defaults() {
- assert_eq!(to_katakana(""), "");
- }
-
- #[test]
- fn quick_brown_fox_romaji_to_katakana() {
- // https://en.wikipedia.org/wiki/Iroha
- // Even the colorful fragrant flowers'
- assert_eq!(
- to_katakana_with_opt("IROHANIHOHETO", with_obsolete_kana()),
- "イロハニホヘト"
- );
- // die sooner or later.'
- assert_eq!(
- to_katakana_with_opt("CHIRINURUWO", with_obsolete_kana()),
- "チリヌルヲ"
- );
- // Us who live in this world'
- assert_eq!(
- to_katakana_with_opt("WAKAYOTARESO", with_obsolete_kana()),
- "ワカヨタレソ"
- );
- // cannot live forever, either.'
- assert_eq!(
- to_katakana_with_opt("TSUNENARAMU", with_obsolete_kana()),
- "ツネナラム"
- );
- // This transient mountain with shifts and changes,'
- assert_eq!(
- to_katakana_with_opt("UWINOOKUYAMA", with_obsolete_kana()),
- "ウヰノオクヤマ"
- );
- // today we are going to overcome, and reach the world of enlightenment.'
- assert_eq!(
- to_katakana_with_opt("KEFUKOETE", with_obsolete_kana()),
- "ケフコエテ"
- );
- // We are not going to have meaningless dreams'
- assert_eq!(
- to_katakana_with_opt("ASAKIYUMEMISHI", with_obsolete_kana()),
- "アサキユメミシ"
- );
- // nor become intoxicated with the fake world anymore.'
- assert_eq!(
- to_katakana_with_opt("WEHIMOSESU", with_obsolete_kana()),
- "ヱヒモセス"
- );
- // *not in iroha*
- assert_eq!(to_katakana("NLTU"), "ンッ");
- }
-
- mod use_obsolete_kana {
- use super::*;
-
- #[test]
- fn use_obsolete_kana_is_false_by_default() {
- assert_eq!(to_katakana("wi"), "ウィ");
- }
- #[test]
- fn wi_ゐ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_katakana_with_opt("wi", with_obsolete_kana()), "ヰ");
- }
- #[test]
- fn we_ゑ_when_use_obsolete_kana_is_true() {
- assert_eq!(to_katakana_with_opt("we", with_obsolete_kana()), "ヱ");
- }
- }
- mod pass_romaji {
- use super::*;
-
- #[test]
- fn false_by_default() {
- assert_eq!(to_katakana("only かな"), "オンly カナ");
- assert_eq!(
- to_katakana_with_opt(
- "only かな",
- Options {
- pass_romaji: true,
- ..Default::default()
- }
- ),
- "only カナ"
- );
- }
- }
-}
diff --git a/wana_kana_rust/src/to_romaji.rs b/wana_kana_rust/src/to_romaji.rs
deleted file mode 100644
index c13e948..0000000
--- a/wana_kana_rust/src/to_romaji.rs
+++ /dev/null
@@ -1,281 +0,0 @@
-use crate::options::Options;
-pub(crate) use crate::to_romaji_node_tree::TO_ROMAJI_NODE_TREE;
-use crate::utils::is_char_katakana::is_char_katakana;
-use crate::utils::katakana_to_hiragana::*;
-
-// lazy_static! {
-// pub(crate) static ref CONSONANTS: Vec =
-// vec!['к','ч','п','т','с','м','н','х','ф','р','д','ґ','в','ц']; pub(crate) static ref VOWELS:
-// Vec = vec!['а','е','о','у','й']; }
-
-/// Convert kana to romaji
-pub fn to_romaji(input: &str) -> String {
- to_romaji_with_opt(input, Options::default())
-}
-
-/// Convert kana to romaji
-pub fn to_romaji_with_opt(orig: &str, options: Options) -> String {
- let kana = katakana_to_hiragana_with_opt(orig, true);
- let orig_chars = orig.chars().collect::>();
- let chars = kana.chars().collect::>();
- let mut ouput = String::with_capacity(orig.len());
- let len = chars.len();
- // Position in the string that is being evaluated
- let mut curr_pos = 0;
-
- while curr_pos != len {
- let result = TO_ROMAJI_NODE_TREE.get(&chars[curr_pos..]);
- // nothing found, pass through
- if result.1 == 0 {
- ouput.push(chars[curr_pos]);
- curr_pos += 1;
- } else {
- let convert_romaji_to_uppercase = {
- if orig_chars[curr_pos..curr_pos + result.1]
- .iter()
- .all(|c| is_char_katakana(*c))
- {
- options.upcase_katakana
- } else {
- false
- }
- };
-
- if convert_romaji_to_uppercase {
- ouput.push_str(&result.0.to_uppercase());
- } else {
- ouput.push_str(result.0);
- }
- curr_pos += result.1;
- }
- }
-
- // let binding = ouput.clone();
- // let shit: Vec<&str> = binding.split_whitespace().collect();
-
- // let mut crapito: Vec = vec![];
-
- // for word in shit {
- // let mut chars = word.chars().collect::>();
- // let wlen = chars.len();
-
- // let mut cur_pos = 0;
- // let mut cons = 0;
-
- // while cur_pos != wlen {
- // // if chars[cur_pos] == 'і' && cur_pos > 0 &&
- // // CONSONANTS.contains(&chars[cur_pos+1]) &&
- // // VOWELS.contains(&chars[cur_pos-1])
- // if CONSONANTS.contains(&chars[cur_pos]) {
- // cons += 1;
- // }
-
- // if cons >= 2 {
- // if chars[cur_pos] == 'i' || chars[cur_pos] == 'й'
- // {
- // if cur_pos+1 != wlen {
- // if CONSONANTS.contains(&chars[cur_pos+1]) &&
- // VOWELS.contains(&chars[cur_pos-1]) { chars[cur_pos] = 'ї';
- // }
- // }
- // }
- // }
-
- // cur_pos += 1;
- // if cur_pos+1 == wlen {
- // cur_pos += 1;
- // }
- // }
-
- // chars.push(' ');
-
- // crapito.append(&mut chars);
- // }
-
- // crapito.pop();
-
- // crapito.iter().cloned().collect::()
-
- ouput
-}
-
-#[cfg(test)]
-mod tests {
- use super::{Options, *};
- #[test]
- fn sane_defaults() {
- assert_eq!(to_romaji(""), "");
- }
-
- #[test]
- fn convert_katakana_to_romaji() {
- assert_eq!(
- to_romaji("ワニカニ ガ スゴイ ダ"),
- "wanikani ga sugoi da"
- );
- }
-
- #[test]
- fn convert_hiragana_to_romaji() {
- assert_eq!(
- to_romaji("わにかに が すごい だ"),
- "wanikani ga sugoi da"
- );
- }
-
- #[test]
- fn convert_mixed_kana_to_romaji() {
- assert_eq!(
- to_romaji("ワニカニ が すごい だ"),
- "wanikani ga sugoi da"
- );
- }
-
- //#[test]
- // fn will_convert_punctuation_and_full_width_spaces() {
- // assert_eq!(to_romaji(JA_PUNC.join("")), EN_PUNC.join(""));
- //}
-
- #[test]
- fn use_the_upcase_katakana_flag_to_preserve_casing_works_for_katakana() {
- assert_eq!(
- to_romaji_with_opt(
- "ワニカニ",
- Options {
- upcase_katakana: true,
- ..Default::default()
- }
- ),
- "WANIKANI"
- );
- }
-
- #[test]
- fn use_the_upcase_katakana_flag_to_preserve_casing_works_for_mixed_kana() {
- assert_eq!(
- to_romaji_with_opt(
- "ワニカニ が すごい だ",
- Options {
- upcase_katakana: true,
- ..Default::default()
- }
- ),
- "WANIKANI ga sugoi da"
- );
- }
-
- #[test]
- fn converts_long_dash_in_hiragana_to_hyphen() {
- assert_eq!(to_romaji("ばつげーむ"), "batsuge-mu");
- }
-
- #[test]
- fn doesnt_confuse_一one_kanji_for_long_dash_ー() {
- assert_eq!(to_romaji("一抹げーむ"), "一抹ge-mu");
- }
-
- #[test]
- fn converts_long_dash_ー_chōonpu_in_katakana_to_long_vowel() {
- assert_eq!(to_romaji("スーパー"), "suupaa");
- }
-
- #[test]
- fn doesnt_convert_オー_to_ou_which_occurs_with_hiragana() {
- assert_eq!(to_romaji("缶コーヒー"), "缶koohii");
- }
-
- #[test]
- fn spaces_must_be_manually_entered() {
- assert_ne!(to_romaji("わにかにがすごいだ"), "wanikani ga sugoi da");
- }
-
- mod double_ns_and_double_consonants {
- use super::*;
-
- #[test]
- fn double_and_single_n() {
- assert_eq!(to_romaji("きんにくまん"), "kinnikuman");
- }
- #[test]
- fn n_extravaganza() {
- assert_eq!(to_romaji("んんにんにんにゃんやん"), "nnninninnyan'yan");
- }
- #[test]
- fn double_consonants() {
- assert_eq!(
- to_romaji("かっぱ たった しゅっしゅ ちゃっちゃ やっつ"),
- "kappa tatta shusshu chatcha yattsu"
- );
- }
- #[test]
- fn xx_double_consonants() {
- assert_eq!(to_romaji("かっぱ"), "kappa");
- }
- }
-
- mod small_kana {
- use super::*;
-
- #[test]
- fn small_tsu_doesnt_transliterate() {
- assert_eq!(to_romaji("っ"), "");
- }
- #[test]
- fn small_kata_ke_doesnt_transliterate() {
- assert_eq!(to_romaji("ヶ"), "ヶ");
- }
- #[test]
- fn small_kata_ka_doesnt_transliterate() {
- assert_eq!(to_romaji("ヵ"), "ヵ");
- }
- #[test]
- fn small_ya() {
- assert_eq!(to_romaji("ゃ"), "ya");
- }
- #[test]
- fn small_yu() {
- assert_eq!(to_romaji("ゅ"), "yu");
- }
- #[test]
- fn small_yo() {
- assert_eq!(to_romaji("ょ"), "yo");
- }
- #[test]
- fn small_a() {
- assert_eq!(to_romaji("ぁ"), "a");
- }
- #[test]
- fn small_i() {
- assert_eq!(to_romaji("ぃ"), "i");
- }
- #[test]
- fn small_u() {
- assert_eq!(to_romaji("ぅ"), "u");
- }
- #[test]
- fn small_e() {
- assert_eq!(to_romaji("ぇ"), "e");
- }
- #[test]
- fn small_o() {
- assert_eq!(to_romaji("ぉ"), "o");
- }
- }
-
- mod apostrophes_in_ambiguous_consonant_vowel_combos {
- use super::*;
-
- #[test]
- fn おんよみ() {
- assert_eq!(to_romaji("おんよみ"), "on'yomi");
- }
- #[test]
- fn んよ_んあ_んゆ() {
- assert_eq!(to_romaji("んよ んあ んゆ"), "n'yo n'a n'yu");
- }
- #[test]
- fn シンヨ() {
- assert_eq!(to_romaji("シンヨ"), "shin'yo");
- }
- }
-}
diff --git a/wana_kana_rust/src/to_romaji_node_tree.rs b/wana_kana_rust/src/to_romaji_node_tree.rs
deleted file mode 100644
index c99c0bf..0000000
--- a/wana_kana_rust/src/to_romaji_node_tree.rs
+++ /dev/null
@@ -1,3781 +0,0 @@
-#[derive(Debug, Clone)]
-pub(crate) struct Node {
- pub transitions: Option>,
- pub output: &'static str,
-}
-
-impl Node {
- pub(crate) fn get<'a>(&self, chars: &'a [char]) -> (&'static str, usize) {
- let mut i = 0;
- let mut curr_node = self;
- for char in chars.iter() {
- if let Some(trans_node) = curr_node.find_transition_node(*char) {
- curr_node = trans_node;
- } else {
- break;
- }
- i += 1;
- }
- (curr_node.output, i)
- }
-
- pub(crate) fn find_transition_node(&self, char: char) -> Option<&Node> {
- if let Some(t) = &self.transitions {
- t.binary_search_by_key(&char, |t| t.0)
- .ok()
- .map(|index| &t[index].1)
- } else {
- None
- }
- }
-
- fn sort(&mut self) {
- if let Some(transitions) = &mut self.transitions {
- transitions.sort_by_key(|el| el.0);
- for el in transitions {
- el.1.sort();
- }
- }
- }
-}
-
-lazy_static! {
- pub(crate) static ref TO_ROMAJI_NODE_TREE: Node = {
- let transitions = Some(vec![
- (
- '\u{3000}',
- Node {
- transitions: None,
- output: " ",
- },
- ),
- (
- '、',
- Node {
- transitions: None,
- output: ",",
- },
- ),
- (
- '。',
- Node {
- transitions: None,
- output: ".",
- },
- ),
- (
- '「',
- Node {
- transitions: None,
- output: "'",
- },
- ),
- (
- '」',
- Node {
- transitions: None,
- output: "’",
- },
- ),
- (
- '『',
- Node {
- transitions: None,
- output: "“",
- },
- ),
- (
- '』',
- Node {
- transitions: None,
- output: "”",
- },
- ),
- (
- '〜',
- Node {
- transitions: None,
- output: "~",
- },
- ),
- (
- 'ぁ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ай",
- },
- ),
- ]),
- output: "а",
- },
- ),
- (
- 'あ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ай",
- },
- ),
- ]),
- output: "а",
- },
- ),
- (
- 'ぃ',
- Node {
- transitions: Some(vec![
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "i\'є",
- },
- ),
- ]),
- output: "і",
- },
- ),
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'え',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ієї",
- },
- ),
- ]),
- output: "іє",
- },
- ),
- (
- 'い',
- Node {
- transitions: None,
- output: "ії",
- },
- ),
- (
- 'ち',
- Node {
- transitions: None,
- output: "їчі",
- },
- ),
- ]),
- output: "і",
- },
- ),
- (
- 'ぅ',
- Node {
- transitions: None,
- output: "у",
- },
- ),
- (
- 'う',
- Node {
- transitions: None,
- output: "у",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "е",
- },
- ),
- (
- 'え',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ей",
- },
- ),
- ]),
- output: "е",
- },
- ),
- (
- 'ぉ',
- Node {
- transitions: None,
- output: "о",
- },
- ),
- (
- 'お',
- Node {
- //DOUBLE VOWEL
- // transitions: None,
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "о",
- //output: "о\u{304}",
- },
- ),
- ]),
- output: "о",
- },
- ),
- (
- 'か',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ち',
- Node {
- transitions: None,
- output: "каїчі",
- },
- ),
- ]),
- output: "кай",
- },
- ),
- (
- 'あ',
- Node {
- transitions: None,
- output: "ка",
- }
- ),
- ]),
- output: "ка",
- },
- ),
- (
- 'が',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ち',
- Node {
- transitions: None,
- output: "ґаїчі",
- },
- ),
- (
- 'も',
- Node {
- transitions: None,
- output: "ґаїмо",
- },
- ),
- ]),
- output: "ґай",
- },
- ),
- ]),
- output: "ґа",
- },
- ),
- (
- 'き',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ち',
- Node {
- transitions: None,
- output: "кіїчі",
- },
- ),
- ]),
- output: "кій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "к\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "кя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "кю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "кьо",
- },
- ),
- ]),
- output: "кьо",
- },
- ),
- ]),
- output: "кі",
- },
- ),
- (
- 'ぎ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ґій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ґ\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ґя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ґю",
- },
- ),
- (
- 'ょ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ґьо",
- },
- ),
- ]),
- output: "ґьо",
- },
- ),
- ]),
- output: "ґі",
- },
- ),
- (
- 'く',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'な',
- Node {
- transitions: None,
- output: "куїна",
- },
- ),
- ]),
- output: "куй",
- },
- ),
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "куй",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "к\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "кя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "кю",
- },
- ),
- (
- 'ょ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "кьо",
- },
- ),
- ]),
- output: "кьо",
- },
- ),
- ]),
- output: "ку",
- },
- ),
- (
- 'ぐ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ґу",
- },
- ),
- ]),
- output: "ґу",
- },
- ),
- (
- 'け',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "кей",
- },
- ),
- ]),
- output: "ке",
- },
- ),
- (
- 'げ',
- Node {
- transitions: None,
- output: "ґе",
- },
- ),
- (
- 'こ',
- Node {
- transitions: None,
- output: "ко",
- },
- ),
- (
- 'ご',
- Node {
- transitions: None,
- output: "ґо",
- },
- ),
- (
- 'さ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "сай",
- },
- ),
- ]),
- output: "са",
- },
- ),
- (
- 'ざ',
- Node {
- transitions: None,
- output: "дза",
- },
- ),
- (
- 'し',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "шій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ш\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "шя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "шю",
- },
- ),
- ]),
- output: "шю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "шьо",
- },
- ),
- ]),
- output: "шьо",
- },
- ),
- ]),
- output: "ші",
- },
- ),
- (
- 'じ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'え',
- Node {
- transitions: None,
- output: "джіїє",
- },
- ),
- ]),
- output: "джій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "дж\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "джя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "джю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "джьо",
- },
- ),
- ]),
- output: "джьо",
- },
- ),
- ]),
- output: "джі",
- },
- ),
- (
- 'す',
- Node {
- transitions: None,
- output: "су",
- },
- ),
- (
- 'ず',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "дзуй"
- },
- ),
- ]),
- output: "дзу",
- },
- ),
- (
- 'せ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "сей",
- },
- ),
- ]),
- output: "се",
- },
- ),
- (
- 'ぜ',
- Node {
- transitions: None,
- output: "дзе",
- },
- ),
- (
- 'そ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: Some(vec![
- // (
- // 'い',
- // Node {
- // transitions: None,
- // output: "сой",
- // },
- // ),
- ]),
- output: "со",
- },
- ),
- ]),
- output: "со",
- },
- ),
- (
- 'ぞ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "дзо",
- },
- ),
- ]),
- output: "дзо",
- },
- ),
- (
- 'た',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "тай",
- },
- ),
- ]),
- output: "та",
- },
- ),
- (
- 'だ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "дай",
- },
- ),
- ]),
- output: "да",
- },
- ),
- (
- 'ち',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "чій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ч\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "чя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "чю",
- },
- ),
- (
- 'ょ',
- Node {
- //DOUBLE VOWEL
- // transitions: None,
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "чьо"
- // output: "чьо\u{304}"
- },
- ),
- ]),
- output: "чьо",
- },
- ),
- ]),
- output: "чі",
- },
- ),
- (
- 'ぢ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "джій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "дж\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "джя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "джю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "джьо",
- },
- ),
- ]),
- output: "джьо",
- },
- ),
- ]),
- output: "джі",
- },
- ),
-
- (
- 'つ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ど',
- Node {
- transitions: None,
- output: "цуїдо",
- },
- ),
- ]),
- output: "цуй",
- },
- ),
- ]),
- output: "цу",
- },
- ),
- (
- 'づ',
- Node {
- transitions: None,
- output: "дзу",
- },
- ),
- (
- 'て',
- Node {
- transitions: None,
- output: "те",
- },
- ),
- (
- 'で',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ді",
- },
- ),
- ]),
- output: "де",
- },
- ),
- (
- 'と',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "то",
- },
- ),
- ]),
- output: "то",
- },
- ),
- (
- 'ど',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "до",
- },
- ),
- ]),
- output: "до",
- },
- ),
- (
- 'な',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "най",
- },
- ),
- ]),
- output: "на",
- },
- ),
- (
- 'に',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "нії",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "н\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ня",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ню",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ньо",
- },
- ),
- ]),
- output: "ньо",
- },
- ),
- ]),
- output: "ні",
- },
- ),
- (
- 'ぬ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "нуй",
- },
- ),
- ]),
- output: "ну",
- },
- ),
- (
- 'ね',
- Node {
- // transitions: None,
- transitions: Some(vec![
- (
- 'え',
- Node {
- transitions: None,
- output: "не",
- },
- ),
- ]),
- output: "не",
- },
- ),
- (
- 'の',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ной",
- },
- ),
- ]),
- output: "но",
- },
- ),
- (
- 'は',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "хай",
- },
- ),
- ]),
- output: "ха",
- },
- ),
- (
- 'ば',
- Node {
- // transitions: None,
- transitions: Some(vec![
- (
- 'あ',
- Node {
- transitions: None,
- output: "ба"
- },
- ),
- ]),
- output: "ба",
- },
- ),
- (
- 'ぱ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "пай"
- }
- ),
- ]),
- output: "па",
- },
- ),
- (
- 'ひ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "хій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "х\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "хя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "хю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "хьо",
- },
- ),
- ]),
- output: "хьо",
- },
- ),
- ]),
- output: "хі",
- },
- ),
- (
- 'び',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "бій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "б\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "бя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "бю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "бьо",
- },
- ),
- ]),
- output: "бьо",
- },
- ),
- ]),
- output: "бі",
- },
- ),
- (
- 'ぴ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "пій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "п\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "пя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "пю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "пьо",
- },
- ),
- ]),
- output: "пьо",
- },
- ),
- ]),
- output: "пі",
- },
- ),
- (
- 'ふ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "фій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ф\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "фя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "фю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "фьо",
- },
- ),
- ]),
- output: "фьо",
- },
- ),
- ]),
- output: "фу",
- },
- ),
- (
- 'ぶ',
- Node {
- transitions: None,
- output: "бу",
- },
- ),
- (
- 'ぷ',
- Node {
- transitions: None,
- output: "пу",
- },
- ),
- (
- 'へ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "хей",
- },
- ),
- ]),
- output: "хе",
- },
- ),
- (
- 'べ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "бей",
- },
- ),
- ]),
- output: "бе",
- },
- ),
- (
- 'ぺ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "пей",
- },
- ),
- ]),
- output: "пе",
- },
- ),
- (
- 'ほ',
- Node {
- transitions: None,
- output: "хо",
- },
- ),
- (
- 'ぼ',
- Node {
- transitions: None,
- output: "бо",
- },
- ),
- (
- 'ぽ',
- Node {
- transitions: None,
- output: "по",
- },
- ),
- (
- 'ま',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "май",
- },
- ),
- ]),
- output: "ма",
- },
- ),
- (
- 'み',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "мій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "м\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "мя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "мю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "мьо",
- },
- ),
- ]),
- output: "мьо",
- },
- ),
- ]),
- output: "мі",
- },
- ),
- (
- 'む',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ち',
- Node {
- transitions: None,
- output: "муїчі",
- },
- ),
- ]),
- output: "муй",
- },
- ),
- ]),
- output: "му",
- },
- ),
- (
- 'め',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "мей",
- },
- ),
- ]),
- output: "ме",
- },
- ),
- (
- 'も',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "мой",
- },
- ),
- ]),
- output: "мо",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "я",
- },
- ),
- (
- 'や',
- Node {
- transitions: None,
- output: "я",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ю",
- },
- ),
- (
- 'ゆ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "юй",
- },
- ),
- (
- 'う',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "юї",
- },
- ),
- ]),
- output: "юу",
- },
- ),
- ]),
- output: "ю",
- },
- ),
- (
- 'ょ',
- Node {
- transitions: None,
- // transitions: Some(vec![
- // (
- // 'う',
- // Node {
- // transitions: None,
- // output: "ьо\u{304}"
- // },
- // ),
- // ]),
- output: "i",
- },
- ),
- (
- 'よ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "йо",
- },
- ),
- ]),
- output: "йо",
- },
- ),
- (
- 'ら',
- Node {
- transitions: None,
- output: "ра",
- },
- ),
- (
- 'り',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: Some(vec![
- (
- 'ち',
- Node {
- transitions: None,
- output: "ріїчі",
- },
- ),
- ]),
- output: "рій",
- },
- ),
- (
- 'え',
- Node {
- transitions: None,
- output: "р\'є",
- },
- ),
- (
- 'や',
- Node {
- transitions: None,
- output: "ря",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "рю",
- },
- ),
- ]),
- output: "рю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "рьо",
- },
- ),
- ]),
- output: "рьо",
- },
- ),
- ]),
- output: "рі",
- },
- ),
- (
- 'る',
- Node {
- transitions: None,
- output: "ру",
- },
- ),
- (
- 'れ',
- Node {
- transitions: None,
- output: "ре",
- },
- ),
- (
- 'ろ',
- Node {
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ро",
- },
- ),
- ]),
- output: "ро",
- },
- ),
- (
- 'ゎ',
- Node {
- transitions: None,
- output: "ва",
- },
- ),
- (
- 'わ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: Some(vec![
- (
- 'ず',
- Node {
- transitions: None,
- output: "ваїдзу",
- },
- ),
- ]),
- output: "вай",
- },
- ),
- ]),
- output: "ва",
- },
- ),
- (
- 'ゐ',
- Node {
- transitions: None,
- output: "ві",
- },
- ),
- (
- 'ゑ',
- Node {
- transitions: None,
- output: "ве",
- },
- ),
- (
- 'を',
- Node {
- transitions: None,
- output: "во",
- },
- ),
- (
- 'ん',
- Node {
- transitions: Some(vec![
- (
- 'あ',
- Node {
- transitions: None,
- output: "n\'a",
- },
- ),
- (
- 'い',
- Node {
- transitions: None,
- output: "н\'ї",
- },
- ),
- (
- '「',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "н\'ї",
- },
- ),
- (
- 'あ',
- Node {
- transitions: None,
- output: "n\'a",
- },
- ),
- (
- 'う',
- Node {
- transitions: None,
- output: "н\'у",
- },
- ),
- (
- 'え',
- Node {
- transitions: None,
- output: "н\'є",
- },
- ),
- (
- 'お',
- Node {
- transitions: None,
- output: "н\'о",
- },
- ),
- (
- 'や',
- Node {
- transitions: None,
- output: "н\'я",
- },
- ),
- (
- 'ゆ',
- Node {
- transitions: None,
- output: "н\'ю",
- },
- ),
- (
- 'よ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "н\'йо",
- },
- ),
- ]),
- output: "н\'йо",
- },
- ),
- ]),
- output: "н\'",
- },
- ),
- (
- 'う',
- Node {
- transitions: None,
- output: "н\'у",
- },
- ),
- (
- 'え',
- Node {
- transitions: None,
- output: "н\'є",
- },
- ),
- (
- 'お',
- Node {
- transitions: None,
- output: "н\'о",
- },
- ),
- (
- 'や',
- Node {
- transitions: None,
- output: "н\'я",
- },
- ),
- (
- 'ゆ',
- Node {
- transitions: None,
- output: "н\'ю",
- },
- ),
- (
- 'よ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "н\'йо",
- },
- ),
- ]),
- output: "н\'йо",
- },
- ),
- (
- 'ま',
- Node {
- transitions: None,
- output: "мма",
- },
- ),
- (
- 'み',
- Node {
- transitions: Some(vec![
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ммя"
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ммю"
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ммьо",
- },
- ),
- ]),
- output: "ммьо"
- },
- )
- ],),
- output: "ммі",
- },
- ),
- (
- 'む',
- Node {
- transitions: None,
- output: "мму",
- },
- ),
- (
- 'め',
- Node {
- transitions: None,
- output: "мме",
- },
- ),
- (
- 'も',
- Node {
- transitions: None,
- output: "ммо",
- },
- ),
- (
- 'ぱ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "мпай"
- }
- ),
- ]),
- output: "мпа"
- },
- ),
- (
- 'ぴ',
- Node {
- transitions: Some(vec![
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "мпя"
- }
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "мпю"
- }
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "мпьо",
- },
- ),
- ]),
- output: "мпьо"
- }
- ),
- ]),
- output: "мпі"
- },
- ),
- (
- 'ぷ',
- Node {
- transitions: None,
- output: "мпу"
- },
- ),
- (
- 'ぺ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "мпей",
- },
- ),
- ]),
- output: "мпе"
- },
- ),
- (
- 'ぽ',
- Node {
- transitions: None,
- output: "мпо"
- },
- ),
- (
- 'ば',
- Node {
- transitions: None,
- output: "мба"
- },
- ),
- (
- 'び',
- Node {
- transitions: Some(vec![
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "мбя"
- }
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "мбю"
- }
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "мбьо",
- },
- ),
- ]),
- output: "мбьо"
- }
- ),
- ]),
- output: "мбі"
- },
- ),
- (
- 'ぶ',
- Node {
- transitions: None,
- output: "мбу"
- },
- ),
- (
- 'べ',
- Node {
- transitions: None,
- output: "мбе"
- },
- ),
- (
- 'ぼ',
- Node {
- transitions: None,
- output: "мбо"
- },
- ),
- (
- 'ぼ',
- Node {
- transitions: None,
- output: "мбо"
- },
- ),
- ]),
- output: "н",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "вій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "в\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "вя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "вю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "вьо",
- },
- ),
- ]),
- output: "вьо",
- },
- ),
- ]),
- output: "ву",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "ва",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "ві",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "вей",
- },
- ),
- ]),
- output: "ве",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "во",
- },
- ),
- (
- '・',
- Node {
- transitions: None,
- output: "/",
- },
- ),
- (
- 'ー',
- Node {
- transitions: None,
- output: "-",
- },
- ),
- (
- '!',
- Node {
- transitions: None,
- output: "!",
- },
- ),
- (
- '(',
- Node {
- transitions: None,
- output: "(",
- },
- ),
- (
- ')',
- Node {
- transitions: None,
- output: ")",
- },
- ),
- (
- ':',
- Node {
- transitions: None,
- output: ":",
- },
- ),
- (
- '?',
- Node {
- transitions: None,
- output: "?",
- },
- ),
- (
- '[',
- Node {
- transitions: None,
- output: "[",
- },
- ),
- (
- ']',
- Node {
- transitions: None,
- output: "]",
- },
- ),
- (
- '{',
- Node {
- transitions: None,
- output: "{",
- },
- ),
- (
- '}',
- Node {
- transitions: None,
- output: "}",
- },
- ),
- (
- 'っ',
- Node {
- transitions: Some(vec![
- (
- '\u{3000}',
- Node {
- transitions: None,
- output: " ",
- },
- ),
- (
- '、',
- Node {
- transitions: None,
- output: ",",
- },
- ),
- (
- '。',
- Node {
- transitions: None,
- output: ".",
- },
- ),
- (
- '「',
- Node {
- transitions: None,
- output: "‘",
- },
- ),
- (
- '」',
- Node {
- transitions: None,
- output: "’",
- },
- ),
- (
- '『',
- Node {
- transitions: None,
- output: "“",
- },
- ),
- (
- '』',
- Node {
- transitions: None,
- output: "”",
- },
- ),
- (
- '〜',
- Node {
- transitions: None,
- output: "~",
- },
- ),
- (
- 'ぁ',
- Node {
- transitions: None,
- output: "а",
- },
- ),
- (
- 'あ',
- Node {
- transitions: None,
- output: "а",
- },
- ),
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "і",
- },
- ),
- (
- 'い',
- Node {
- transitions: None,
- output: "і",
- },
- ),
- (
- 'ぅ',
- Node {
- transitions: None,
- output: "у",
- },
- ),
- (
- 'う',
- Node {
- transitions: None,
- output: "у",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "е",
- },
- ),
- (
- 'え',
- Node {
- transitions: None,
- output: "е",
- },
- ),
- (
- 'ぉ',
- Node {
- transitions: None,
- output: "о",
- },
- ),
- (
- 'お',
- Node {
- transitions: None,
- output: "о",
- },
- ),
- (
- 'か',
- Node {
- // transitions: None,
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "ккай"
- }
- )
- ]),
- output: "кка",
- },
- ),
- (
- 'が',
- Node {
- transitions: None,
- output: "ґґа",
- },
- ),
- (
- 'き',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ккій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "кк\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ккя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ккю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ккьо",
- },
- ),
- ]),
- output: "ккьо",
- },
- ),
- ]),
- output: "ккі",
- },
- ),
- (
- 'ぎ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ґґій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ґґ\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ґґя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ґґю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ґґьо",
- },
- ),
- ]),
- output: "ґґьо",
- },
- ),
- ]),
- output: "ґґі",
- },
- ),
- (
- 'く',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ккій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "кк\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ккя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ккю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ккьо",
- },
- ),
- ]),
- output: "ккьо",
- },
- ),
- ]),
- output: "кку",
- },
- ),
- (
- 'ぐ',
- Node {
- transitions: None,
- output: "ґґу",
- },
- ),
- (
- 'け',
- Node {
- transitions: None,
- output: "кке",
- },
- ),
- (
- 'げ',
- Node {
- transitions: None,
- output: "ґґе",
- },
- ),
- (
- 'こ',
- Node {
- transitions: None,
- output: "кко",
- },
- ),
- (
- 'ご',
- Node {
- transitions: None,
- output: "ґґо",
- },
- ),
- (
- 'さ',
- Node {
- transitions: None,
- output: "сса",
- },
- ),
- (
- 'ざ',
- Node {
- transitions: None,
- output: "ддза",
- },
- ),
- (
- 'し',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "шшій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "шш\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "шшя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "шшю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "шшьо",
- },
- ),
- ]),
- output: "шшьо",
- },
- ),
- ]),
- output: "шші",
- },
- ),
- (
- 'じ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "дджій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ддж\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "дджя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "дджю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "дджьо",
- },
- ),
- ]),
- output: "дджьо",
- },
- ),
- ]),
- output: "дджі",
- },
- ),
- (
- 'す',
- Node {
- transitions: None,
- output: "ссу",
- },
- ),
- (
- 'ず',
- Node {
- transitions: None,
- output: "ддзу",
- },
- ),
- (
- 'せ',
- Node {
- transitions: None,
- output: "ссе",
- },
- ),
- (
- 'ぜ',
- Node {
- transitions: None,
- output: "ддзе",
- },
- ),
- (
- 'そ',
- Node {
- transitions: None,
- output: "ссо",
- },
- ),
- (
- 'ぞ',
- Node {
- transitions: None,
- output: "ддзо",
- },
- ),
- (
- 'た',
- Node {
- transitions: None,
- output: "тта",
- },
- ),
- (
- 'だ',
- Node {
- transitions: None,
- output: "дда",
- },
- ),
- (
- 'ち',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ччій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "чч\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ччя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ччю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ччьо",
- },
- ),
- ]),
- output: "ччьо",
- },
- ),
- ]),
- output: "ччі",
- },
- ),
- (
- 'ぢ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "дджій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "ддж\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "дджя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "дджю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "дджьо",
- },
- ),
- ]),
- output: "дджьо",
- },
- ),
- ]),
- output: "дджі",
- },
- ),
- (
- 'つ',
- Node {
- transitions: None,
- output: "ццу",
- },
- ),
- (
- 'づ',
- Node {
- transitions: None,
- output: "ддзу",
- },
- ),
- (
- 'て',
- Node {
- transitions: None,
- output: "тте",
- },
- ),
- (
- 'で',
- Node {
- transitions: None,
- output: "дде",
- },
- ),
- (
- 'と',
- Node {
- transitions: None,
- output: "тто",
- },
- ),
- (
- 'ど',
- Node {
- transitions: None,
- output: "ддо",
- },
- ),
- (
- 'な',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "най",
- },
- ),
- ]),
- output: "на",
- },
- ),
- (
- 'に',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ній",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "н\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ня",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ню",
- },
- ),
- (
- 'ょ',
- Node {
- transitions: None,
- output: "нью",
- },
- ),
- ]),
- output: "ні",
- },
- ),
- (
- 'ぬ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "нуй",
- },
- ),
- ]),
- output: "ну",
- },
- ),
- (
- 'ね',
- Node {
- transitions: None,
- output: "не",
- },
- ),
- (
- 'の',
- Node {
- transitions: None,
- output: "но",
- },
- ),
- (
- 'は',
- Node {
- transitions: None,
- output: "хха",
- },
- ),
- (
- 'ば',
- Node {
- transitions: None,
- output: "бба",
- },
- ),
- (
- 'ぱ',
- Node {
- transitions: None,
- output: "ппа",
- },
- ),
- (
- 'ひ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ххій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "хх\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ххя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ххю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ххьо",
- },
- ),
- ]),
- output: "ххьо",
- },
- ),
- ]),
- output: "ххі",
- },
- ),
- (
- 'び',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ббій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "бб\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ббя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ббю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ббьо",
- },
- ),
- ]),
- output: "ббьо",
- },
- ),
- ]),
- output: "ббі",
- },
- ),
- (
- 'ぴ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ппій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "пп\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ппя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ппю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ппьо",
- },
- ),
- ]),
- output: "ппьо",
- },
- ),
- ]),
- output: "ппі",
- },
- ),
- (
- 'ふ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ффій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "фф\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ффя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ффю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ффьо",
- },
- ),
- ]),
- output: "ффьо",
- },
- ),
- ]),
- output: "ффу",
- },
- ),
- (
- 'ぶ',
- Node {
- transitions: None,
- output: "ббу",
- },
- ),
- (
- 'ぷ',
- Node {
- transitions: None,
- output: "ппу",
- },
- ),
- (
- 'へ',
- Node {
- transitions: None,
- output: "ххе",
- },
- ),
- (
- 'べ',
- Node {
- transitions: None,
- output: "ббе",
- },
- ),
- (
- 'ぺ',
- Node {
- transitions: None,
- output: "ппе",
- },
- ),
- (
- 'ほ',
- Node {
- transitions: None,
- output: "ххо",
- },
- ),
- (
- 'ぼ',
- Node {
- transitions: None,
- output: "ббо",
- },
- ),
- (
- 'ぽ',
- Node {
- transitions: None,
- output: "ппо",
- },
- ),
- (
- 'ま',
- Node {
- transitions: None,
- output: "мма",
- },
- ),
- (
- 'み',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ммій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "мм\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ммя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ммю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ммьо",
- },
- ),
- ]),
- output: "ммьо",
- },
- ),
- ]),
- output: "ммі",
- },
- ),
- (
- 'む',
- Node {
- transitions: None,
- output: "мму",
- },
- ),
- (
- 'め',
- Node {
- transitions: None,
- output: "мме",
- },
- ),
- (
- 'も',
- Node {
- transitions: None,
- output: "ммо",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "я",
- },
- ),
- (
- 'や',
- Node {
- transitions: None,
- output: "я",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ю",
- },
- ),
- (
- 'ゆ',
- Node {
- transitions: Some(vec![
- (
- 'い',
- Node {
- transitions: None,
- output: "юй",
- },
- ),
- ]),
- output: "ю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ьо",
- },
- ),
- ]),
- output: "ьо",
- },
- ),
- (
- 'よ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ьо",
- },
- ),
- ]),
- output: "ьо",
- },
- ),
- (
- 'ら',
- Node {
- transitions: None,
- output: "рра",
- },
- ),
- (
- 'り',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ррій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "рр\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "рря",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ррю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ррьо",
- },
- ),
- ]),
- output: "ррьо",
- },
- ),
- ]),
- output: "ррі",
- },
- ),
- (
- 'る',
- Node {
- transitions: None,
- output: "рру",
- },
- ),
- (
- 'れ',
- Node {
- transitions: None,
- output: "рре",
- },
- ),
- (
- 'ろ',
- Node {
- transitions: None,
- output: "рро",
- },
- ),
- (
- 'わ',
- Node {
- transitions: None,
- output: "вва",
- },
- ),
- (
- 'ゐ',
- Node {
- transitions: None,
- output: "вві",
- },
- ),
- (
- 'ゑ',
- Node {
- transitions: None,
- output: "вве",
- },
- ),
- (
- 'を',
- Node {
- transitions: None,
- output: "вво",
- },
- ),
- (
- 'ん',
- Node {
- transitions: None,
- output: "н",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: Some(vec![
- (
- 'ぃ',
- Node {
- transitions: None,
- output: "ввій",
- },
- ),
- (
- 'ぇ',
- Node {
- transitions: None,
- output: "вв\'є",
- },
- ),
- (
- 'ゃ',
- Node {
- transitions: None,
- output: "ввя",
- },
- ),
- (
- 'ゅ',
- Node {
- transitions: None,
- output: "ввю",
- },
- ),
- (
- 'ょ',
- Node {
- // DOUBLE VOWEL
- transitions: Some(vec![
- (
- 'う',
- Node {
- transitions: None,
- output: "ввьо",
- },
- ),
- ]),
- output: "ввьо",
- },
- ),
- ]),
- output: "вву",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "вва",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "вві",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "вве",
- },
- ),
- (
- 'ゔ',
- Node {
- transitions: None,
- output: "вво",
- },
- ),
- (
- '・',
- Node {
- transitions: None,
- output: "/",
- },
- ),
- (
- 'ー',
- Node {
- transitions: None,
- output: "-",
- },
- ),
- (
- '!',
- Node {
- transitions: None,
- output: "!",
- },
- ),
- (
- '(',
- Node {
- transitions: None,
- output: "(",
- },
- ),
- (
- ')',
- Node {
- transitions: None,
- output: ")",
- },
- ),
- (
- ':',
- Node {
- transitions: None,
- output: ":",
- },
- ),
- (
- '?',
- Node {
- transitions: None,
- output: "?",
- },
- ),
- (
- '[',
- Node {
- transitions: None,
- output: "[",
- },
- ),
- (
- ']',
- Node {
- transitions: None,
- output: "]",
- },
- ),
- (
- '{',
- Node {
- transitions: None,
- output: "{",
- },
- ),
- (
- '}',
- Node {
- transitions: None,
- output: "}",
- },
- ),
- ]),
- output: "",
- },
- ),
- ]);
-
- let mut node = Node {
- transitions,
- output: "",
- };
- node.sort();
- node
- };
-}
diff --git a/wana_kana_rust/src/tokenize.rs b/wana_kana_rust/src/tokenize.rs
deleted file mode 100644
index 9240bd6..0000000
--- a/wana_kana_rust/src/tokenize.rs
+++ /dev/null
@@ -1,151 +0,0 @@
-//! Splits input into array of strings separated by opinionated
-//! [`TokenType`](crate::tokenize::TokenType).
-//!
-//! [`tokenize_detailed`](crate::tokenize::tokenize_detailed) returns an
-//! array containing `{ TokenType, String }` instead of `String`
-//!
-//! # Example
-//! ```
-//! use wana_kana::tokenize::*;
-//! let empty: Vec = vec![];
-//! assert_eq!(tokenize(""), empty);
-//! assert_eq!(tokenize("ふふフフ"), vec!["ふふ", "フフ"]);
-//! assert_eq!(tokenize("感じ"), vec!["感", "じ"]);
-//! assert_eq!(tokenize("私は悲しい"), vec!["私", "は", "悲", "しい"] );
-//! ```
-
-use itertools::Itertools;
-
-use crate::utils::is_char_english_punctuation::*;
-use crate::utils::is_char_hiragana::*;
-use crate::utils::is_char_japanese::is_char_japanese;
-use crate::utils::is_char_japanese_number::*;
-use crate::utils::is_char_japanese_punctuation::*;
-use crate::utils::is_char_kanji::*;
-use crate::utils::is_char_katakana::*;
-use crate::utils::is_char_latin_number::*;
-use crate::utils::is_char_romaji::is_char_romaji;
-
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-/// The tokenizer assigns each token a `TokenType`.
-///
-/// In compact tokenization mode only `En`, `Ja` and `Other` exist.
-pub enum TokenType {
- /// Egnlish token.
- En,
- /// Japanese token
- Ja,
- /// English number
- EnNum,
- /// Japanese number
- JaNum,
- /// English punctuation
- EnPunc,
- /// Japanese punctuation
- JaPunc,
- /// Kanji
- Kanji,
- /// Hiragana
- Hiragana,
- /// Katakana
- Katakana,
- /// Space
- Space,
- /// Other
- Other,
-}
-
-fn get_type(input: char, compact: bool) -> TokenType {
- if compact {
- match input {
- ' ' => TokenType::En, // En Space
- ' ' => TokenType::Ja, // Ja Space
- input
- if is_char_japanese_number(input)
- || is_char_latin_number(input)
- || is_char_english_punctuation(input)
- || is_char_japanese_punctuation(input) =>
- {
- TokenType::Other
- }
- input if is_char_japanese(input) => TokenType::Ja,
- input if is_char_romaji(input) => TokenType::En,
- _ => TokenType::Other,
- }
- } else {
- match input {
- ' ' => TokenType::Space, // En Space
- ' ' => TokenType::Space, // Ja Space
- input if is_char_japanese_number(input) => TokenType::JaNum,
- input if is_char_latin_number(input) => TokenType::EnNum,
- input if is_char_english_punctuation(input) => TokenType::EnPunc,
- input if is_char_japanese_punctuation(input) => TokenType::JaPunc,
- input if is_char_kanji(input) => TokenType::Kanji,
- input if is_char_hiragana(input) => TokenType::Hiragana,
- input if is_char_katakana(input) => TokenType::Katakana,
- input if is_char_japanese(input) => TokenType::Ja,
- input if is_char_romaji(input) => TokenType::En,
- _ => TokenType::Other,
- }
- }
-}
-
-/// Tokenizes the text. Splits input into array of strings separated by opinionated
-/// [`TokenType`](crate::tokenize::TokenType).
-///
-/// # Example
-/// ```
-/// use wana_kana::tokenize::*;
-/// let empty: Vec = vec![];
-/// assert_eq!(tokenize(""), empty);
-/// assert_eq!(tokenize("ふふフフ"), vec!["ふふ", "フフ"]);
-/// assert_eq!(tokenize("感じ"), vec!["感", "じ"]);
-/// assert_eq!(tokenize("私は悲しい"), vec!["私", "は", "悲", "しい"] );
-/// ```
-pub fn tokenize(input: &str) -> Vec {
- tokenize_with_opt(input, false)
-}
-
-/// Tokenizes the text. Splits input into array of strings separated by opinionated
-/// [`TokenType`](crate::tokenize::TokenType).
-///
-/// If `compact` is set, many same-language tokens are combined (spaces + text, kanji + kana,
-/// numeral + punctuation).
-pub fn tokenize_with_opt(input: &str, compact: bool) -> Vec {
- let mut result = vec![];
- for (_, group) in &input.chars().group_by(|elt| get_type(*elt, compact)) {
- result.push(group.collect());
- }
- result
-}
-
-/// Tokenizes the text and returns the token for each type.
-///
-/// # Example
-/// ```
-/// use wana_kana::tokenize::*;
-/// assert_eq!(
-/// tokenize_detailed(
-/// "5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب",
-/// true
-/// ),
-/// vec![
-/// (TokenType::Other, "5".to_string()),
-/// (TokenType::En, "romaji here".to_string()),
-/// (TokenType::Other, "...!?".to_string()),
-/// (TokenType::Ja, "漢字ひらがなカタ カナ".to_string()),
-/// (TokenType::Other, "4「".to_string()),
-/// (TokenType::Ja, "SHIO".to_string()),
-/// (TokenType::Other, "」。!".to_string()),
-/// (TokenType::En, " ".to_string()),
-/// (TokenType::Other, "لنذهب".to_string()),
-/// ]
-/// );
-/// ```
-pub fn tokenize_detailed(input: &str, compact: bool) -> Vec<(TokenType, String)> {
- let mut result = vec![];
- for (token_type, group) in &input.chars().group_by(|elt| get_type(*elt, compact)) {
- result.push((token_type, group.collect()));
- }
- result
-}
diff --git a/wana_kana_rust/src/traits.rs b/wana_kana_rust/src/traits.rs
deleted file mode 100644
index 8e5cc71..0000000
--- a/wana_kana_rust/src/traits.rs
+++ /dev/null
@@ -1,424 +0,0 @@
-//! The `wana_kana::ConvertJapanese` trait is implemented for `&str`, which allows
-//! conversion between kana and romaji.
-//!
-//! # Examples
-//!
-//! ```
-//! use wana_kana::ConvertJapanese;
-//! // to kana
-//! assert_eq!("o".to_kana(), "お");
-//! assert_eq!("ona".to_kana(), "おな");
-//! assert_eq!("onaji".to_kana(), "おなじ");
-//! assert_eq!("onaji BUTTSUUJI".to_kana(), "おなじ ブッツウジ");
-//! assert_eq!("ONAJI buttsuuji".to_kana(), "オナジ ぶっつうじ");
-//! assert_eq!("座禅‘zazen’スタイル".to_kana(), "座禅「ざぜん」スタイル");
-//! // to hiragana
-//! assert_eq!("toukyou,オオサカ".to_hiragana(), "とうきょう、おおさか");
-//! // to katakana
-//! assert_eq!("toukyou,おおさか".to_katakana(), "トウキョウ、オオサカ");
-//! // to romaji
-//! assert_eq!("ひらがな カタカナ".to_romaji(), "hiragana katakana");
-//! ```
-#[cfg(feature = "enable_regex")]
-use regex::Regex;
-
-use crate::Options;
-
-/// The `wana_kana::ConvertJapanese` trait is implemented for `&str`, which allows
-/// conversion between kana and romaji.
-///
-/// # Examples
-///
-/// ```
-/// use wana_kana::ConvertJapanese;
-/// // to kana
-/// assert_eq!("o".to_kana(), "お");
-/// assert_eq!("ona".to_kana(), "おな");
-/// assert_eq!("onaji".to_kana(), "おなじ");
-/// assert_eq!("onaji BUTTSUUJI".to_kana(), "おなじ ブッツウジ");
-/// assert_eq!("ONAJI buttsuuji".to_kana(), "オナジ ぶっつうじ");
-/// assert_eq!("座禅‘zazen’スタイル".to_kana(), "座禅「ざぜん」スタイル");
-/// // to hiragana
-/// assert_eq!("toukyou,オオサカ".to_hiragana(), "とうきょう、おおさか");
-/// // to katakana
-/// assert_eq!("toukyou,おおさか".to_katakana(), "トウキョウ、オオサカ");
-/// // to romaji
-/// assert_eq!("ひらがな カタカナ".to_romaji(), "hiragana katakana");
-/// ```
-pub trait ConvertJapanese {
- /// Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Kana](https://en.wikipedia.org/wiki/Kana), lowercase text will result in [Hiragana](https://en.wikipedia.org/wiki/Hiragana) and uppercase text will result in [Katakana](https://en.wikipedia.org/wiki/Katakana).
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// assert_eq!("o".to_kana(), "お");
- /// assert_eq!("ona".to_kana(), "おな");
- /// assert_eq!("onaji".to_kana(), "おなじ");
- /// assert_eq!("onaji BUTTSUUJI".to_kana(), "おなじ ブッツウジ");
- /// assert_eq!("ONAJI buttsuuji".to_kana(), "オナジ ぶっつうじ");
- /// assert_eq!("座禅‘zazen’スタイル".to_kana(), "座禅「ざぜん」スタイル");
- /// assert_eq!("!?./,~-‘’“”[](){}".to_kana(), "!?。・、〜ー「」『』[](){}");
- /// ```
- fn to_kana(self) -> String;
-
- /// Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Kana](https://en.wikipedia.org/wiki/Kana), lowercase text will result in [Hiragana](https://en.wikipedia.org/wiki/Hiragana) and uppercase text will result in [Katakana](https://en.wikipedia.org/wiki/Katakana).
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// use wana_kana::Options;
- /// assert_eq!("batsuge-mu".to_kana_with_opt(Options {use_obsolete_kana: true, ..Default::default() } ), "ばつげーむ");
- /// assert_eq!("we".to_kana_with_opt(Options {use_obsolete_kana: true, ..Default::default() } ), "ゑ");
- /// ```
- fn to_kana_with_opt(self, options: Options) -> String;
-
- /// Convert input to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// assert_eq!("toukyou,オオサカ".to_hiragana(), "とうきょう、おおさか");
- /// assert_eq!("wi".to_hiragana(), "うぃ");
- /// ```
- fn to_hiragana(self) -> String;
-
- /// Convert input to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// use wana_kana::Options;
- /// assert_eq!("only かな".to_hiragana_with_opt(Options {pass_romaji: true, ..Default::default() } ), "only かな");
- /// assert_eq!("wi".to_hiragana_with_opt(Options {use_obsolete_kana: true, ..Default::default() } ), "ゐ");
- /// ```
- fn to_hiragana_with_opt(self, options: Options) -> String;
-
- /// Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)
- fn to_katakana(self) -> String;
-
- /// Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)
- fn to_katakana_with_opt(self, options: Options) -> String;
-
- /// Convert kana to romaji
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// assert_eq!("ひらがな カタカナ".to_romaji(), "hiragana katakana");
- /// ```
- fn to_romaji(self) -> String;
-
- /// Convert kana to romaji with Options.
- /// # Examples
- /// ```
- /// use wana_kana::ConvertJapanese;
- /// use wana_kana::Options;
- /// assert_eq!("ひらがな カタカナ".to_romaji_with_opt(Options {upcase_katakana: true, ..Default::default() } ), "hiragana KATAKANA");
- /// ```
-
- fn to_romaji_with_opt(self, options: Options) -> String;
-}
-
-impl ConvertJapanese for &str {
- #[inline]
- fn to_kana(self) -> String {
- crate::to_kana::to_kana(self)
- }
-
- #[inline]
- fn to_kana_with_opt(self, options: Options) -> String {
- crate::to_kana::to_kana_with_opt(self, options)
- }
-
- #[inline]
- fn to_hiragana(self) -> String {
- crate::to_hiragana::to_hiragana(self)
- }
-
- #[inline]
- fn to_hiragana_with_opt(self, options: Options) -> String {
- crate::to_hiragana::to_hiragana_with_opt(self, options)
- }
-
- #[inline]
- fn to_katakana(self) -> String {
- crate::to_katakana::to_katakana(self)
- }
-
- #[inline]
- fn to_katakana_with_opt(self, options: Options) -> String {
- crate::to_katakana::to_katakana_with_opt(self, options)
- }
-
- #[inline]
- fn to_romaji(self) -> String {
- crate::to_romaji::to_romaji(self)
- }
-
- #[inline]
- fn to_romaji_with_opt(self, options: Options) -> String {
- crate::to_romaji::to_romaji_with_opt(self, options)
- }
-}
-
-/// The `wana_kana::IsJapaneseStr` trait is implemented for `&str`, which allows easy
-/// checking of whether a string is fully composed of hiragana, katakana, kana,
-/// kanji, Japanese, or mixed.
-pub trait IsJapaneseStr {
- /// Test if all chars of `input` are [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("げーむ".is_hiragana(), true);
- /// assert_eq!("A".is_hiragana(), false);
- /// assert_eq!("あア".is_hiragana(), false);
- /// ```
- fn is_hiragana(self) -> bool;
- /// Test if all chars of `input` are [Katakana](https://en.wikipedia.org/wiki/Katakana)
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("ゲーム".is_katakana(), true);
- /// assert_eq!("あ".is_katakana(), false);
- /// assert_eq!("A".is_katakana(), false);
- /// assert_eq!("あア".is_katakana(), false);
- /// ```
- fn is_katakana(self) -> bool;
- /// Test if all chars of `input` are [Kana](https://en.wikipedia.org/wiki/Kana) ([Katakana](https://en.wikipedia.org/wiki/Katakana) and/or [Hiragana](https://en.wikipedia.org/wiki/Hiragana))
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("あ".is_kana(), true);
- /// assert_eq!("ア".is_kana(), true);
- /// assert_eq!("あーア".is_kana(), true);
- /// assert_eq!("A".is_kana(), false);
- /// assert_eq!("あAア".is_kana(), false);
- /// ```
- fn is_kana(self) -> bool;
- /// Test if every char in `input` is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization))
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("A".is_romaji(), true);
- /// assert_eq!("xYz".is_romaji(), true);
- /// assert_eq!("Tōkyō and Ōsaka".is_romaji(), true);
- /// assert_eq!("あアA".is_romaji(), false);
- /// assert_eq!("お願い".is_romaji(), false);
- /// assert_eq!("熟成".is_romaji(), false);
- /// assert_eq!("a*b&c-d".is_romaji(), true);
- /// assert_eq!("0123456789".is_romaji(), true);
- /// assert_eq!("a!b&cーd".is_romaji(), false);
- /// assert_eq!("hello".is_romaji(), false);
- /// ```
- fn is_romaji(self) -> bool;
-
- #[cfg_attr(docsrs, doc(cfg(feature = "enable_regex")))]
- #[cfg(feature = "enable_regex")]
- /// Test if every char in `input` is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization)
- /// or matches the provided regex
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// use regex::Regex;
- /// assert_eq!(
- /// "a!b&cーd".is_romaji_with_whitelist(Some(&Regex::new(r"[!ー]").unwrap())),
- /// true
- /// );
- /// ```
- fn is_romaji_with_whitelist(self, allowed: Option<&Regex>) -> bool;
-
- /// Test if all chars of `input` are [Kanji](https://en.wikipedia.org/wiki/Kanji) ([Japanese CJK ideographs](https://en.wikipedia.org/wiki/CJK_Unified_Ideographs))
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("刀".is_kanji(), true);
- /// assert_eq!("切腹".is_kanji(), true);
- /// assert_eq!("勢い".is_kanji(), false);
- /// assert_eq!("あAア".is_kanji(), false);
- /// assert_eq!("🐸".is_kanji(), false);
- /// ```
- fn is_kanji(self) -> bool;
-
- /// Test if any chars of `input` are [Kanji](https://en.wikipedia.org/wiki/Kanji) ([Japanese CJK ideographs](https://en.wikipedia.org/wiki/CJK_Unified_Ideographs))
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("勢い".contains_kanji(), true);
- /// assert_eq!("hello".contains_kanji(), false);
- /// ```
- fn contains_kanji(self) -> bool;
-
- /// Test if `input` only includes [Kanji](https://en.wikipedia.org/wiki/Kanji), [Kana](https://en.wikipedia.org/wiki/Kana), zenkaku punctuation, japanese symbols and japanese numbers.
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("泣き虫".is_japanese(), true);
- /// assert_eq!("あア".is_japanese(), true);
- /// assert_eq!("2月".is_japanese(), true); // Zenkaku numbers allowed
- /// assert_eq!("2月".is_japanese(), false); // Normal numbers not allowed
- /// assert_eq!("泣き虫。!〜$".is_japanese(), true); // Zenkaku/JA punctuation
- /// assert_eq!("泣き虫.!~$".is_japanese(), false); // Latin punctuation fails
- /// assert_eq!("A".is_japanese(), false);
- /// ```
- fn is_japanese(self) -> bool;
-
- #[cfg_attr(docsrs, doc(cfg(feature = "enable_regex")))]
- #[cfg(feature = "enable_regex")]
- /// Checks if all chars are in the japanese unicode ranges or match the provided regex
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// use regex::Regex;
- /// assert_eq!(
- /// "≪偽括弧≫".is_japanese_with_whitelist(Some(&Regex::new(r"[≪≫]").unwrap())),
- /// true
- /// );
- /// ```
- fn is_japanese_with_whitelist(self, allowed: Option<&Regex>) -> bool;
-
- /// Test if `input` contains a mix of [Romaji](https://en.wikipedia.org/wiki/Romaji) and [Kana](https://en.wikipedia.org/wiki/Kana),
- /// or [Kanji](https://en.wikipedia.org/wiki/Kanji)
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("Aア".is_mixed(), true);
- /// assert_eq!("Aあ".is_mixed(), true);
- /// assert_eq!("Aあア".is_mixed(), true);
- /// assert_eq!("2あア".is_mixed(), false);
- /// assert_eq!("お腹A".is_mixed(), true);
- /// ```
- fn is_mixed(self) -> bool;
-
- /// Test if `input` contains a mix of [Romaji](https://en.wikipedia.org/wiki/Romaji) and [Kana](https://en.wikipedia.org/wiki/Kana),
- /// or [Kanji](https://en.wikipedia.org/wiki/Kanji)
- ///
- /// # Examples
- /// ```
- /// use wana_kana::IsJapaneseStr;
- /// assert_eq!("Abあア".is_mixed_pass_kanji(true), true);
- /// assert_eq!("お腹A".is_mixed_pass_kanji(true), true);
- /// assert_eq!("お腹A".is_mixed_pass_kanji(false), false);
- /// assert_eq!("ab".is_mixed_pass_kanji(true), false);
- /// assert_eq!("あア".is_mixed_pass_kanji(true), false);
- /// ```
- fn is_mixed_pass_kanji(self, pass_kanji: bool) -> bool;
-}
-
-impl IsJapaneseStr for &str {
- #[inline]
- fn is_hiragana(self) -> bool {
- crate::is_hiragana::is_hiragana(self)
- }
-
- #[inline]
- fn is_katakana(self) -> bool {
- crate::is_katakana::is_katakana(self)
- }
-
- #[inline]
- fn is_kana(self) -> bool {
- crate::is_kana::is_kana(self)
- }
-
- #[inline]
- fn is_kanji(self) -> bool {
- crate::is_kanji::is_kanji(self)
- }
-
- #[inline]
- fn contains_kanji(self) -> bool {
- crate::is_kanji::contains_kanji(self)
- }
-
- #[inline]
- #[cfg(feature = "enable_regex")]
- fn is_japanese_with_whitelist(self, allowed: Option<&Regex>) -> bool {
- crate::is_japanese::is_japanese_with_whitelist(self, allowed)
- }
-
- #[inline]
- fn is_japanese(self) -> bool {
- crate::is_japanese::is_japanese(self)
- }
-
- #[inline]
- fn is_romaji(self) -> bool {
- crate::is_romaji::is_romaji(self)
- }
-
- #[cfg(feature = "enable_regex")]
- #[inline]
- fn is_romaji_with_whitelist(self, allowed: Option<&Regex>) -> bool {
- crate::is_romaji::is_romaji_with_whitelist(self, allowed)
- }
-
- #[inline]
- fn is_mixed(self) -> bool {
- crate::is_mixed::is_mixed(self)
- }
-
- #[inline]
- fn is_mixed_pass_kanji(self, pass_kanji: bool) -> bool {
- crate::is_mixed::is_mixed_pass_kanji(self, pass_kanji)
- }
-}
-
-/// The `wana_kana::IsJapaneseChar` trait is implemented for the `char`type,
-/// which allows easy checking of whether a `char` or `&str` is a Japanese character,
-/// number or punctuation.
-pub trait IsJapaneseChar {
- /// Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana).
- fn is_hiragana(self) -> bool;
- /// Tests a character. Returns true if the character is [Katakana](https://en.wikipedia.org/wiki/Katakana).
- fn is_katakana(self) -> bool;
- /// Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana) or [Katakana](https://en.wikipedia.org/wiki/Katakana).
- fn is_kana(self) -> bool;
- /// Tests a character. Returns true if the character is a CJK ideograph (kanji).
- fn is_kanji(self) -> bool;
- /// Checks if a char is in any of the japanese unicode ranges.
- fn is_japanese(self) -> bool;
- /// Tests a character. Returns true if the character is considered a Zenkaku number(0-9)
- fn is_japanese_number(self) -> bool;
- /// Tests a character. Returns true if the character is considered japanese punctuation.
- fn is_japanese_punctuation(self) -> bool;
-}
-
-impl IsJapaneseChar for char {
- #[inline]
- fn is_hiragana(self) -> bool {
- crate::utils::is_char_hiragana(self)
- }
-
- #[inline]
- fn is_katakana(self) -> bool {
- crate::utils::is_char_katakana(self)
- }
-
- #[inline]
- fn is_kana(self) -> bool {
- crate::utils::is_char_kana(self)
- }
-
- #[inline]
- fn is_kanji(self) -> bool {
- crate::utils::is_char_kanji(self)
- }
-
- #[inline]
- fn is_japanese(self) -> bool {
- crate::utils::is_char_japanese(self)
- }
-
- #[inline]
- fn is_japanese_number(self) -> bool {
- crate::utils::is_char_japanese_number(self)
- }
-
- #[inline]
- fn is_japanese_punctuation(self) -> bool {
- crate::utils::is_char_japanese_punctuation(self)
- }
-}
diff --git a/wana_kana_rust/src/trim_okurigana.rs b/wana_kana_rust/src/trim_okurigana.rs
deleted file mode 100644
index 882fa5a..0000000
--- a/wana_kana_rust/src/trim_okurigana.rs
+++ /dev/null
@@ -1,87 +0,0 @@
-//! Strips trailing [Okurigana](https://en.wikipedia.org/wiki/Okurigana) if `input` is a mix of [Kanji](https://en.wikipedia.org/wiki/Kanji) and [Kana](https://en.wikipedia.org/wiki/Kana)
-//!
-//! # Examples
-//! ```
-//! use wana_kana::trim_okurigana::*;
-//! assert_eq!(trim_okurigana("踏み込む"), "踏み込");
-//! assert_eq!(trim_okurigana("使い方"), "使い方");
-//! assert_eq!(trim_okurigana("申し申し"), "申し申");
-//! assert_eq!(trim_okurigana("お腹"), "お腹");
-//! assert_eq!(trim_okurigana("お祝い"), "お祝");
-//! ```
-
-use crate::is_japanese::*;
-use crate::is_kana::*;
-use crate::tokenize::*;
-use crate::utils::is_char_kana::*;
-use crate::utils::is_char_kanji::*;
-
-#[inline]
-/// Strips trailing [Okurigana](https://en.wikipedia.org/wiki/Okurigana) if `input` is a mix of [Kanji](https://en.wikipedia.org/wiki/Kanji) and [Kana](https://en.wikipedia.org/wiki/Kana)
-pub fn trim_okurigana(input: &str) -> &str {
- trim_okurigana_with_opt(input, false, None)
-}
-
-pub(crate) fn is_leading_without_initial_kana(input: &str, trim_from_start: bool) -> bool {
- trim_from_start && !is_char_kana(input.chars().next().unwrap())
-}
-
-#[inline]
-pub(crate) fn is_trailing_without_final_kana(input: &str, trim_from_start: bool) -> bool {
- !trim_from_start && !is_char_kana(input.chars().last().unwrap())
-}
-
-pub(crate) fn is_invalid_matcher(input: &str, match_kanji: Option<&str>) -> bool {
- if let Some(match_kanji) = match_kanji {
- match_kanji.chars().all(is_char_kanji)
- } else {
- is_kana(input)
- }
-}
-
-/// Strips trailing [Okurigana](https://en.wikipedia.org/wiki/Okurigana) if `input` is a mix of [Kanji](https://en.wikipedia.org/wiki/Kanji) and [Kana](https://en.wikipedia.org/wiki/Kana)
-///
-/// Description.
-///
-/// * `trim_from_start` - trim the start of the text. If unset will trim the end of the text
-/// * `match_kanji` - In case input is all Kana, the kanji needs to be provided to know where to
-/// trim
-///
-/// # Examples
-/// ```rust
-/// use wana_kana::trim_okurigana::*;
-/// assert_eq!(trim_okurigana_with_opt("おはら", false, Some("お腹")), "おはら");
-/// assert_eq!(trim_okurigana_with_opt("おはら", true, Some("お腹")), "はら");
-/// assert_eq!(trim_okurigana_with_opt("ふみこむ", false, Some("踏み込む")), "ふみこ");
-/// assert_eq!(trim_okurigana_with_opt("踏み込む", false, None), "踏み込");
-/// assert_eq!(trim_okurigana_with_opt("おみまい", true, Some("お祝い")), "みまい");
-/// assert_eq!(trim_okurigana_with_opt("おみまい", false, Some("お祝い")), "おみま");
-/// ```
-pub fn trim_okurigana_with_opt<'a>(
- input: &'a str,
- trim_from_start: bool,
- match_kanji: Option<&str>,
-) -> &'a str {
- if !is_japanese(input)
- // Check already trimmed start
- || is_leading_without_initial_kana(input, trim_from_start)
- // Check already trimmed end
- || is_trailing_without_final_kana(input, trim_from_start)
- || is_invalid_matcher(input, match_kanji)
- {
- return input;
- }
-
- let tokens = if let Some(match_kanji) = match_kanji {
- tokenize(match_kanji)
- } else {
- tokenize(input)
- };
- dbg!(&tokens);
-
- if trim_from_start {
- input.trim_start_matches(&tokens[0])
- } else {
- input.trim_end_matches(tokens.iter().last().unwrap())
- }
-}
diff --git a/wana_kana_rust/src/utils/get_chunk.rs b/wana_kana_rust/src/utils/get_chunk.rs
deleted file mode 100644
index 9a8f296..0000000
--- a/wana_kana_rust/src/utils/get_chunk.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-/// Returns a substring based on character position start/end values
-pub fn get_chunk(text: &str, start: usize, end: usize) -> &str {
- let start = text.char_indices().nth(start).map(|el| el.0).unwrap_or(0);
- let end = text
- .char_indices()
- .nth(end)
- .map(|el| el.0)
- .unwrap_or_else(|| text.len());
- &text[start..end]
-}
-
-#[test]
-fn get_chunk_test() {
- assert_eq!(get_chunk("derpalerp", 3, 6), "pal");
- assert_eq!(get_chunk("de", 0, 1), "d");
- assert_eq!(get_chunk("", 1, 2), "");
-}
diff --git a/wana_kana_rust/src/utils/hashmap_macro.rs b/wana_kana_rust/src/utils/hashmap_macro.rs
deleted file mode 100644
index 288215c..0000000
--- a/wana_kana_rust/src/utils/hashmap_macro.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-#[macro_export]
-macro_rules! hashmap {
- (@single $($x:tt)*) => (());
- (@count $($rest:expr),*) => (<[()]>::len(&[$(hashmap!(@single $rest)),*]));
-
- ($($key:expr => $value:expr,)+) => { hashmap!($($key => $value),+) };
- ($($key:expr => $value:expr),*) => {
- {
- let _cap = hashmap!(@count $($key),*);
- let mut _map = ::fnv::FnvHashMap::with_capacity_and_hasher(_cap, Default::default());
- $(
- let _ = _map.insert($key, $value);
- )*
- _map
- }
- };
-}
diff --git a/wana_kana_rust/src/utils/hiragana_to_katakana.rs b/wana_kana_rust/src/utils/hiragana_to_katakana.rs
deleted file mode 100644
index a829d75..0000000
--- a/wana_kana_rust/src/utils/hiragana_to_katakana.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-use crate::constants::{HIRAGANA_START, KATAKANA_START};
-use crate::utils::is_char_hiragana::*;
-use crate::utils::is_char_long_dash::*;
-use crate::utils::is_char_slash_dot::*;
-
-/// Convert [Hiragana](https://en.wikipedia.org/wiki/Hiragana) to [Katakana](https://en.wikipedia.org/wiki/Katakana)
-///
-/// Passes through any non-hiragana chars
-///
-/// # Examples
-///
-///
-/// hiragana_to_katakana('ひらがな')
-///
-/// // => "ヒラガナ"
-///
-/// hiragana_to_katakana('ひらがな is a type of kana')
-///
-/// // => "ヒラガナ is a type of kana"
-
-pub fn hiragana_to_katakana(input: &str) -> String {
- let mut kata = vec![];
- for char in input.chars() {
- // Short circuit to avoid incorrect codeshift for 'ー' and '・'
- if is_char_long_dash(char) || is_char_slash_dot(char) {
- kata.push(char);
- } else if is_char_hiragana(char) {
- // Shift charcode.
- let code = char as i32 + (KATAKANA_START as i32 - HIRAGANA_START as i32);
- // let kata_char = String.from_char_code(code);
- let kata_char = std::char::from_u32(code as u32).unwrap();
- kata.push(kata_char);
- } else {
- // Pass non-hiragana chars through
- kata.push(char);
- }
- }
- kata.into_iter().collect()
-}
diff --git a/wana_kana_rust/src/utils/is_char_consonant.rs b/wana_kana_rust/src/utils/is_char_consonant.rs
deleted file mode 100644
index 61bc297..0000000
--- a/wana_kana_rust/src/utils/is_char_consonant.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-/// Tests a character and an english consonant. Returns true if the char is a consonant.
-///
-/// * `include_Y` include y as a consonant in test
-
-#[inline]
-pub fn is_char_consonant(char: char, include_y: bool) -> bool {
- match char {
- 'b' | 'c' | 'd' | 'f' | 'g' | 'h' | 'j' | 'k' | 'l' | 'm' | 'n' | 'p' | 'q' | 'r' | 's'
- | 't' | 'v' | 'w' | 'x' | 'z' => true,
- 'y' if include_y => true,
- _ => false,
- }
-}
-
-#[test]
-fn is_char_consonant_test() {
- assert_eq!(is_char_consonant('y', false), false);
- assert_eq!(is_char_consonant('y', true), true);
- assert_eq!(is_char_consonant('a', true), false);
- assert_eq!(is_char_consonant('!', true), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_english_punctuation.rs b/wana_kana_rust/src/utils/is_char_english_punctuation.rs
deleted file mode 100644
index 8ea7532..0000000
--- a/wana_kana_rust/src/utils/is_char_english_punctuation.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-/// Tests a character. Returns true if the character is considered English punctuation.
-///
-/// * `char` - character to test
-use crate::constants::EN_PUNCTUATION_RANGES;
-use crate::utils::is_char_in_range::*;
-
-pub fn is_char_english_punctuation(char: char) -> bool {
- EN_PUNCTUATION_RANGES
- .iter()
- .any(|el: &[u32; 2]| is_char_in_range(char, el[0], el[1]))
-}
diff --git a/wana_kana_rust/src/utils/is_char_hiragana.rs b/wana_kana_rust/src/utils/is_char_hiragana.rs
deleted file mode 100644
index bae29fd..0000000
--- a/wana_kana_rust/src/utils/is_char_hiragana.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-use crate::constants::{HIRAGANA_END, HIRAGANA_START};
-use crate::utils::is_char_in_range::*;
-use crate::utils::is_char_long_dash::is_char_long_dash;
-
-/// Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana).
-pub fn is_char_hiragana(char: char) -> bool {
- if is_char_long_dash(char) {
- return true;
- };
- is_char_in_range(char, HIRAGANA_START, HIRAGANA_END)
-}
-
-#[test]
-fn is_char_hiragana_test() {
- assert_eq!(is_char_hiragana('な'), true);
- assert_eq!(is_char_hiragana('ナ'), false);
- assert_eq!(is_char_hiragana('n'), false);
- assert_eq!(is_char_hiragana('!'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_in_range.rs b/wana_kana_rust/src/utils/is_char_in_range.rs
deleted file mode 100644
index 7e70253..0000000
--- a/wana_kana_rust/src/utils/is_char_in_range.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-/// Takes a character and a unicode range. Returns true if the char is in the range.
-///
-/// * `char` - unicode character
-///
-/// * `start` - unicode start range
-///
-/// * `end` - unicode end range
-
-#[inline]
-pub fn is_char_in_range(char: char, start: u32, end: u32) -> bool {
- start <= char as u32 && char as u32 <= end
-}
-
-#[test]
-fn is_char_in_range_test() {
- use crate::constants::{HIRAGANA_END, HIRAGANA_START};
- assert_eq!(is_char_in_range('は', HIRAGANA_START, HIRAGANA_END), true);
- assert_eq!(is_char_in_range('d', HIRAGANA_START, HIRAGANA_END), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_japanese.rs b/wana_kana_rust/src/utils/is_char_japanese.rs
deleted file mode 100644
index 63212e3..0000000
--- a/wana_kana_rust/src/utils/is_char_japanese.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-//! Tests a character. Returns true if the character is in any unicode range used by japanese.
-use crate::constants::JAPANESE_RANGES;
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is in any unicode range used by japanese.
-pub fn is_char_japanese(char: char) -> bool {
- JAPANESE_RANGES
- .iter()
- .any(|el: &[u32; 2]| is_char_in_range(char, el[0], el[1]))
-}
-
-#[test]
-fn is_char_japanese_test() {
- assert_eq!(is_char_japanese('1'), true);
- assert_eq!(is_char_japanese('ナ'), true);
- assert_eq!(is_char_japanese('は'), true);
- assert_eq!(is_char_japanese('缶'), true);
- assert_eq!(is_char_japanese('〜'), true);
- assert_eq!(is_char_japanese('n'), true);
- assert_eq!(is_char_japanese('K'), true);
- assert_eq!(is_char_japanese('1'), false);
- assert_eq!(is_char_japanese('n'), false);
- assert_eq!(is_char_japanese('K'), false);
- assert_eq!(is_char_japanese('!'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_japanese_number.rs b/wana_kana_rust/src/utils/is_char_japanese_number.rs
deleted file mode 100644
index 54c6f26..0000000
--- a/wana_kana_rust/src/utils/is_char_japanese_number.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-use crate::constants::ZENKAKU_NUMBERS;
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is considered a Zenkaku number(0-9)
-
-pub fn is_char_japanese_number(char: char) -> bool {
- is_char_in_range(char, ZENKAKU_NUMBERS[0], ZENKAKU_NUMBERS[1])
-}
diff --git a/wana_kana_rust/src/utils/is_char_japanese_punctuation.rs b/wana_kana_rust/src/utils/is_char_japanese_punctuation.rs
deleted file mode 100644
index 531f1b6..0000000
--- a/wana_kana_rust/src/utils/is_char_japanese_punctuation.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-use crate::constants::JA_PUNCTUATION_RANGES;
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is considered japanese punctuation.
-
-pub fn is_char_japanese_punctuation(char: char) -> bool {
- JA_PUNCTUATION_RANGES
- .iter()
- .any(|el: &[u32; 2]| is_char_in_range(char, el[0], el[1]))
-}
diff --git a/wana_kana_rust/src/utils/is_char_kana.rs b/wana_kana_rust/src/utils/is_char_kana.rs
deleted file mode 100644
index 266043d..0000000
--- a/wana_kana_rust/src/utils/is_char_kana.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use crate::utils::is_char_hiragana::*;
-use crate::utils::is_char_katakana::*;
-
-/// Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana) or [Katakana](https://en.wikipedia.org/wiki/Katakana).
-
-pub fn is_char_kana(char: char) -> bool {
- is_char_hiragana(char) || is_char_katakana(char)
-}
-
-#[test]
-fn is_char_kana_test() {
- assert_eq!(is_char_kana('は'), true);
- assert_eq!(is_char_kana('ナ'), true);
- assert_eq!(is_char_kana('n'), false);
- assert_eq!(is_char_kana('!'), false);
- assert_eq!(is_char_kana('-'), false);
- assert_eq!(is_char_kana('ー'), true);
-}
diff --git a/wana_kana_rust/src/utils/is_char_kanji.rs b/wana_kana_rust/src/utils/is_char_kanji.rs
deleted file mode 100644
index f4eb2f1..0000000
--- a/wana_kana_rust/src/utils/is_char_kanji.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-use crate::utils::is_char_in_range::*;
-
-static KANJI_START: u32 = 0x4E00;
-static KANJI_END: u32 = 0x9FAF;
-
-/// Tests a character. Returns true if the character is a CJK ideograph (kanji).
-pub fn is_char_kanji(char: char) -> bool {
- is_char_in_range(char, KANJI_START, KANJI_END)
-}
-
-#[test]
-fn is_char_kanji_test() {
- assert_eq!(is_char_kanji('腹'), true);
- assert_eq!(is_char_kanji('一'), true); // kanji for いち・1 - not a long hyphen
- assert_eq!(is_char_kanji('ー'), false); // long hyphen
- assert_eq!(is_char_kanji('は'), false);
- assert_eq!(is_char_kanji('ナ'), false);
- assert_eq!(is_char_kanji('n'), false);
- assert_eq!(is_char_kanji('!'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_katakana.rs b/wana_kana_rust/src/utils/is_char_katakana.rs
deleted file mode 100644
index 55215c8..0000000
--- a/wana_kana_rust/src/utils/is_char_katakana.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-use crate::constants::{KATAKANA_END, KATAKANA_START};
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is [Katakana](https://en.wikipedia.org/wiki/Katakana).
-
-pub fn is_char_katakana(char: char) -> bool {
- is_char_in_range(char, KATAKANA_START, KATAKANA_END)
-}
-
-#[test]
-fn is_char_katakana_test() {
- assert_eq!(is_char_katakana('ナ'), true);
- assert_eq!(is_char_katakana('は'), false);
- assert_eq!(is_char_katakana('n'), false);
- assert_eq!(is_char_katakana('!'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_latin_number.rs b/wana_kana_rust/src/utils/is_char_latin_number.rs
deleted file mode 100644
index 1549a0f..0000000
--- a/wana_kana_rust/src/utils/is_char_latin_number.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-use crate::constants::LATIN_NUMBERS;
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is considered a latin number. 0-9
-
-pub fn is_char_latin_number(char: char) -> bool {
- is_char_in_range(char, LATIN_NUMBERS[0], LATIN_NUMBERS[1])
-}
diff --git a/wana_kana_rust/src/utils/is_char_long_dash.rs b/wana_kana_rust/src/utils/is_char_long_dash.rs
deleted file mode 100644
index f52db75..0000000
--- a/wana_kana_rust/src/utils/is_char_long_dash.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-use crate::constants::PROLONGED_SOUND_MARK;
-
-/// Returns true if char is 'ー'
-pub fn is_char_long_dash(char: char) -> bool {
- char as u32 == PROLONGED_SOUND_MARK
-}
-
-#[test]
-fn is_char_long_dash_test() {
- assert_eq!(is_char_long_dash('ー'), true);
- assert_eq!(is_char_long_dash('-'), false);
- assert_eq!(is_char_long_dash('f'), false);
- assert_eq!(is_char_long_dash('ふ'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_punctuation.rs b/wana_kana_rust/src/utils/is_char_punctuation.rs
deleted file mode 100644
index 2d3485c..0000000
--- a/wana_kana_rust/src/utils/is_char_punctuation.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-use crate::utils::is_char_english_punctuation::*;
-use crate::utils::is_char_japanese_punctuation::*;
-
-/// Tests a character. Returns true if the character is considered Japanese or English punctuation.
-
-pub fn is_char_punctuation(char: char) -> bool {
- is_char_english_punctuation(char) || is_char_japanese_punctuation(char)
-}
diff --git a/wana_kana_rust/src/utils/is_char_romaji.rs b/wana_kana_rust/src/utils/is_char_romaji.rs
deleted file mode 100644
index 612161c..0000000
--- a/wana_kana_rust/src/utils/is_char_romaji.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use crate::constants::ROMAJI_RANGES;
-use crate::utils::is_char_in_range::*;
-
-/// Tests a character. Returns true if the character is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization))
-pub fn is_char_romaji(char: char) -> bool {
- ROMAJI_RANGES
- .iter()
- .any(|el: &[u32; 2]| is_char_in_range(char, el[0], el[1]))
-}
-
-#[test]
-fn is_char_romajin_test() {
- assert_eq!(is_char_romaji('n'), true);
- assert_eq!(is_char_romaji('!'), true);
- assert_eq!(is_char_romaji('ナ'), false);
- assert_eq!(is_char_romaji('は'), false);
- assert_eq!(is_char_romaji('缶'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_slash_dot.rs b/wana_kana_rust/src/utils/is_char_slash_dot.rs
deleted file mode 100644
index bbb0d7a..0000000
--- a/wana_kana_rust/src/utils/is_char_slash_dot.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-use crate::constants::KANA_SLASH_DOT;
-
-/// Tests if char is '・'
-#[inline]
-pub fn is_char_slash_dot(char: char) -> bool {
- char as u32 == KANA_SLASH_DOT
-}
-
-#[test]
-fn is_char_slash_dot_test() {
- assert_eq!(is_char_slash_dot('・'), true);
- assert_eq!(is_char_slash_dot('/'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_upper_case.rs b/wana_kana_rust/src/utils/is_char_upper_case.rs
deleted file mode 100644
index cac946d..0000000
--- a/wana_kana_rust/src/utils/is_char_upper_case.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use crate::constants::{UPPERCASE_END, UPPERCASE_START};
-use crate::utils::is_char_in_range::*;
-
-/// Tests if char is in English unicode uppercase range
-#[inline]
-pub fn is_char_upper_case(char: char) -> bool {
- is_char_in_range(char, UPPERCASE_START, UPPERCASE_END)
-}
-
-#[test]
-fn is_char_upper_case_test() {
- assert_eq!(is_char_upper_case('A'), true);
- assert_eq!(is_char_upper_case('D'), true);
- assert_eq!(is_char_upper_case('-'), false);
- assert_eq!(is_char_upper_case('ー'), false);
- assert_eq!(is_char_upper_case('a'), false);
- assert_eq!(is_char_upper_case('d'), false);
-}
diff --git a/wana_kana_rust/src/utils/is_char_vowel.rs b/wana_kana_rust/src/utils/is_char_vowel.rs
deleted file mode 100644
index 81bcc40..0000000
--- a/wana_kana_rust/src/utils/is_char_vowel.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/// Tests a character and an english vowel. Returns true if the char is a vowel.
-pub fn is_char_vowel(char: char) -> bool {
- is_char_vowel_opt(char, true)
-}
-
-/// Tests a character and an english vowel. Returns true if the char is a vowel.
-///
-/// * `include_y` include y as a vowel in test
-pub fn is_char_vowel_opt(char: char, include_y: bool) -> bool {
- match char {
- 'a' | 'e' | 'i' | 'o' | 'u' => true,
- 'y' if include_y => true,
- _ => false,
- }
-}
-
-#[test]
-fn is_char_vowel_test() {
- assert_eq!(is_char_vowel_opt('y', false), false);
- assert_eq!(is_char_vowel_opt('y', true), true);
- assert_eq!(is_char_vowel('x'), false);
- assert_eq!(is_char_vowel('!'), false);
-}
diff --git a/wana_kana_rust/src/utils/katakana_to_hiragana.rs b/wana_kana_rust/src/utils/katakana_to_hiragana.rs
deleted file mode 100644
index 84be019..0000000
--- a/wana_kana_rust/src/utils/katakana_to_hiragana.rs
+++ /dev/null
@@ -1,103 +0,0 @@
-//! Convert [Katakana](https://en.wikipedia.org/wiki/Katakana) to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
-//!
-//! Passes through any non-katakana chars
-//!
-//! # Examples
-//!
-//! katakana_to_hiragana('カタカナ')
-//!
-//! // => "かたかな"
-//!
-//! katakana_to_hiragana('カタカナ is a type of kana')
-//!
-//! // => "かたかな is a type of kana"
-
-use fnv::FnvHashMap;
-
-use crate::constants::{HIRAGANA_START, KATAKANA_START};
-use crate::to_romaji::TO_ROMAJI_NODE_TREE;
-use crate::utils::is_char_katakana::*;
-use crate::utils::is_char_long_dash::*;
-use crate::utils::is_char_slash_dot::*;
-
-pub fn is_char_initial_long_dash(char: char, index: usize) -> bool {
- is_char_long_dash(char) && index == 0
-}
-pub fn is_char_inner_long_dash(char: char, index: usize) -> bool {
- is_char_long_dash(char) && index != 0
-}
-pub fn is_kana_as_symbol(char: char) -> bool {
- 'ヶ' == char || 'ヵ' == char
-}
-
-lazy_static! {
- pub static ref LONG_VOWELS: FnvHashMap = hashmap! {
- 'a' => 'あ',
- 'i' => 'い',
- 'u' => 'う',
- 'e' => 'え',
- 'o' => 'う',
- };
-}
-
-pub fn katakana_to_hiragana(input: &str) -> String {
- katakana_to_hiragana_with_opt(input, false)
-}
-
-pub(crate) fn katakana_to_hiragana_with_opt(input: &str, is_destination_romaji: bool) -> String {
- let mut hira = Vec::with_capacity(input.chars().count());
- let mut previous_kana: Option = None;
- for (index, char) in input.chars().enumerate() {
- // Short circuit to avoid incorrect codeshift for 'ー' and '・'
- if is_char_slash_dot(char)
- || is_char_initial_long_dash(char, index)
- || is_kana_as_symbol(char)
- {
- hira.push(char);
- // Transform long vowels: 'オー' to 'おう'
- } else if let (Some(previous_kana), true) =
- (previous_kana, is_char_inner_long_dash(char, index))
- {
- // Transform previous_kana back to romaji, and slice off the vowel
- let romaji = TO_ROMAJI_NODE_TREE
- .find_transition_node(previous_kana)
- .unwrap()
- .output;
-
- let romaji = romaji.chars().last().unwrap_or_else(|| {
- panic!("could not find kana {:?} in TO_ROMAJI map", previous_kana)
- });
- // However, ensure 'オー' => 'おお' => 'oo' if this is a transform on the way to romaji
- if let Some(prev_char) = input.chars().nth(index - 1) {
- if is_char_katakana(prev_char) && romaji == 'o' && is_destination_romaji {
- hira.push('お');
- continue;
- }
- }
-
- if let Some(hit) = LONG_VOWELS.get(&romaji) {
- hira.push(*hit);
- }
- } else if !is_char_long_dash(char) && is_char_katakana(char) {
- // Shift charcode.
- let code = char as i32 + (HIRAGANA_START as i32 - KATAKANA_START as i32);
- let hira_char = std::char::from_u32(code as u32).unwrap();
- hira.push(hira_char);
- previous_kana = Some(hira_char);
- } else {
- // Pass non katakana chars through
- hira.push(char);
- previous_kana = None;
- }
- }
- hira.into_iter().collect()
-}
-
-#[test]
-fn test_katakana_to_hiragana() {
- assert_eq!(katakana_to_hiragana("カタカナ"), "かたかな");
- assert_eq!(
- katakana_to_hiragana("カタカナ is a type of kana"),
- "かたかな is a type of kana"
- );
-}
diff --git a/wana_kana_rust/src/utils/mod.rs b/wana_kana_rust/src/utils/mod.rs
deleted file mode 100644
index eaaf957..0000000
--- a/wana_kana_rust/src/utils/mod.rs
+++ /dev/null
@@ -1,104 +0,0 @@
-#[macro_use]
-pub(crate) mod hashmap_macro;
-pub mod get_chunk;
-pub mod hiragana_to_katakana;
-pub mod is_char_consonant;
-pub mod is_char_english_punctuation;
-pub mod is_char_hiragana;
-pub mod is_char_in_range;
-pub mod is_char_japanese;
-pub mod is_char_japanese_number;
-pub mod is_char_japanese_punctuation;
-pub mod is_char_kana;
-pub mod is_char_kanji;
-pub mod is_char_katakana;
-pub mod is_char_latin_number;
-pub mod is_char_long_dash;
-pub mod is_char_punctuation;
-pub mod is_char_romaji;
-pub mod is_char_slash_dot;
-pub mod is_char_upper_case;
-pub mod is_char_vowel;
-pub mod katakana_to_hiragana;
-pub mod romaji_to_hiragana;
-
-pub use get_chunk::*;
-pub use hashmap_macro::*;
-pub use hiragana_to_katakana::*;
-pub use is_char_consonant::*;
-pub use is_char_english_punctuation::*;
-pub use is_char_hiragana::*;
-pub use is_char_in_range::*;
-pub use is_char_japanese::*;
-pub use is_char_japanese_number::*;
-pub use is_char_japanese_punctuation::*;
-pub use is_char_kana::*;
-pub use is_char_kanji::*;
-pub use is_char_katakana::*;
-pub use is_char_latin_number::*;
-pub use is_char_long_dash::*;
-pub use is_char_punctuation::*;
-pub use is_char_romaji::*;
-pub use is_char_slash_dot::*;
-pub use is_char_upper_case::*;
-pub use is_char_vowel::*;
-pub use katakana_to_hiragana::*;
-pub use romaji_to_hiragana::*;
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- pub const JA_PUNC: [char; 18] = [
- '!', '?', '。', ':', '・', '、', '〜', 'ー', '「', '」', '『', '』', '[', ']', '(',
- ')', '{', '}',
- ];
-
- pub const EN_PUNC: [char; 18] = [
- '!', '?', '.', ':', '/', ',', '~', '-', '‘', '’', '“', '”', '[', ']', '(', ')', '{', '}',
- ];
-
- #[test]
- fn is_char_english_punctuation_test() {
- assert_eq!(
- EN_PUNC.iter().cloned().all(is_char_english_punctuation),
- true
- );
- assert_eq!(
- JA_PUNC.iter().cloned().all(is_char_english_punctuation),
- false
- );
- assert_eq!(is_char_english_punctuation(' '), true);
- assert_eq!(is_char_english_punctuation('a'), false);
- assert_eq!(is_char_english_punctuation('ふ'), false);
- assert_eq!(is_char_english_punctuation('字'), false);
- }
-
- #[test]
- fn is_char_punctuation_test() {
- assert_eq!(EN_PUNC.iter().cloned().all(is_char_punctuation), true);
- assert_eq!(JA_PUNC.iter().cloned().all(is_char_punctuation), true);
- assert_eq!(is_char_punctuation(' '), true);
- assert_eq!(is_char_punctuation(' '), true);
- assert_eq!(is_char_punctuation('a'), false);
- assert_eq!(is_char_punctuation('ふ'), false);
- assert_eq!(is_char_punctuation('字'), false);
- }
-
- #[test]
- fn is_char_japanese_punctuation_test() {
- assert_eq!(
- EN_PUNC.iter().cloned().all(is_char_japanese_punctuation),
- false
- );
- assert_eq!(
- JA_PUNC.iter().cloned().all(is_char_japanese_punctuation),
- true
- );
- assert_eq!(is_char_japanese_punctuation(' '), true);
- assert_eq!(is_char_japanese_punctuation('?'), false);
- assert_eq!(is_char_japanese_punctuation('a'), false);
- assert_eq!(is_char_japanese_punctuation('ふ'), false);
- assert_eq!(is_char_japanese_punctuation('字'), false);
- }
-}
diff --git a/wana_kana_rust/src/utils/romaji_to_hiragana.rs b/wana_kana_rust/src/utils/romaji_to_hiragana.rs
deleted file mode 100644
index 6233853..0000000
--- a/wana_kana_rust/src/utils/romaji_to_hiragana.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-use crate::options::Options;
-use crate::to_kana::*;
-
-/// Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)
-///
-/// romaji_to_hiragana("hiragana", Options::default())
-/// => "ひらがな"
-pub fn romaji_to_hiragana(input: &str, options: Options) -> String {
- let text = input.to_lowercase(); // ensure hiragana
- to_kana_with_opt(&text, options)
-}
diff --git a/wana_kana_rust/tests/conversion_tables.rs b/wana_kana_rust/tests/conversion_tables.rs
deleted file mode 100644
index 8464911..0000000
--- a/wana_kana_rust/tests/conversion_tables.rs
+++ /dev/null
@@ -1,561 +0,0 @@
-#[allow(dead_code)]
-pub const JA_PUNC: [char; 18] = [
- '!', '?', '。', ':', '・', '、', '〜', 'ー', '「', '」', '『', '』', '[', ']', '(', ')',
- '{', '}',
-];
-
-#[allow(dead_code)]
-pub const EN_PUNC: [char; 18] = [
- '!', '?', '.', ':', '/', ',', '~', '-', '‘', '’', '“', '”', '[', ']', '(', ')', '{', '}',
-];
-
-#[allow(dead_code)]
-pub const ROMA_TO_HIRA_KATA: [[&str; 3]; 338] = [
- // symbols that should all be the same after conversion
- ["ヶ", "ヶ", "ヶ"],
- ["ヵ", "ヵ", "ヵ"],
- ["1", "1", "1"],
- ["@", "@", "@"],
- ["#", "#", "#"],
- ["$", "$", "$"],
- ["%", "%", "%"],
- // should all convert
- ["!", "!", "!"],
- ["?", "?", "?"],
- [".", "。", "。"],
- [":", ":", ":"],
- ["/", "・", "・"],
- [",", "、", "、"],
- ["~", "〜", "〜"],
- ["-", "ー", "ー"],
- ["‘", "「", "「"],
- ["’", "」", "」"],
- ["“", "『", "『"],
- ["”", "』", "』"],
- ["[", "[", "["],
- ["]", "]", "]"],
- ["(", "(", "("],
- [")", ")", ")"],
- ["{", "{", "{"],
- ["}", "}", "}"],
- ["a", "あ", "ア"],
- ["i", "い", "イ"],
- ["u", "う", "ウ"],
- ["e", "え", "エ"],
- ["o", "お", "オ"],
- ["la", "ぁ", "ァ"],
- ["xa", "ぁ", "ァ"],
- ["li", "ぃ", "ィ"],
- ["xi", "ぃ", "ィ"],
- ["lu", "ぅ", "ゥ"],
- ["xu", "ぅ", "ゥ"],
- ["le", "ぇ", "ェ"],
- ["xe", "ぇ", "ェ"],
- ["lo", "ぉ", "ォ"],
- ["xo", "ぉ", "ォ"],
- ["yi", "い", "イ"],
- ["wu", "う", "ウ"],
- ["whu", "う", "ウ"],
- ["xa", "ぁ", "ァ"],
- ["xi", "ぃ", "ィ"],
- ["xu", "ぅ", "ゥ"],
- ["xe", "ぇ", "ェ"],
- ["xo", "ぉ", "ォ"],
- ["xyi", "ぃ", "ィ"],
- ["xye", "ぇ", "ェ"],
- ["ye", "いぇ", "イェ"],
- ["wha", "うぁ", "ウァ"],
- ["whi", "うぃ", "ウィ"],
- ["whe", "うぇ", "ウェ"],
- ["who", "うぉ", "ウォ"],
- ["wi", "うぃ", "ウィ"],
- ["we", "うぇ", "ウェ"],
- ["va", "ゔぁ", "ヴァ"],
- ["vi", "ゔぃ", "ヴィ"],
- ["vu", "ゔ", "ヴ"],
- ["ve", "ゔぇ", "ヴェ"],
- ["vo", "ゔぉ", "ヴォ"],
- ["vyi", "ゔぃ", "ヴィ"],
- ["vye", "ゔぇ", "ヴェ"],
- ["vya", "ゔゃ", "ヴャ"],
- ["vyu", "ゔゅ", "ヴュ"],
- ["vyo", "ゔょ", "ヴョ"],
- ["ka", "か", "カ"],
- ["ki", "き", "キ"],
- ["ku", "く", "ク"],
- ["ke", "け", "ケ"],
- ["ko", "こ", "コ"],
- ["lka", "ヵ", "ヵ"],
- ["lke", "ヶ", "ヶ"],
- ["xka", "ヵ", "ヵ"],
- ["xke", "ヶ", "ヶ"],
- ["kya", "きゃ", "キャ"],
- ["kyi", "きぃ", "キィ"],
- ["kyu", "きゅ", "キュ"],
- ["kye", "きぇ", "キェ"],
- ["kyo", "きょ", "キョ"],
- ["ca", "か", "カ"],
- ["ci", "き", "キ"],
- ["cu", "く", "ク"],
- ["ce", "け", "ケ"],
- ["co", "こ", "コ"],
- ["lca", "ヵ", "ヵ"],
- ["lce", "ヶ", "ヶ"],
- ["xca", "ヵ", "ヵ"],
- ["xce", "ヶ", "ヶ"],
- ["qya", "くゃ", "クャ"],
- ["qyu", "くゅ", "クュ"],
- ["qyo", "くょ", "クョ"],
- ["qwa", "くぁ", "クァ"],
- ["qwi", "くぃ", "クィ"],
- ["qwu", "くぅ", "クゥ"],
- ["qwe", "くぇ", "クェ"],
- ["qwo", "くぉ", "クォ"],
- ["qa", "くぁ", "クァ"],
- ["qi", "くぃ", "クィ"],
- ["qe", "くぇ", "クェ"],
- ["qo", "くぉ", "クォ"],
- ["kwa", "くぁ", "クァ"],
- ["qyi", "くぃ", "クィ"],
- ["qye", "くぇ", "クェ"],
- ["ga", "が", "ガ"],
- ["gi", "ぎ", "ギ"],
- ["gu", "ぐ", "グ"],
- ["ge", "げ", "ゲ"],
- ["go", "ご", "ゴ"],
- ["gya", "ぎゃ", "ギャ"],
- ["gyi", "ぎぃ", "ギィ"],
- ["gyu", "ぎゅ", "ギュ"],
- ["gye", "ぎぇ", "ギェ"],
- ["gyo", "ぎょ", "ギョ"],
- ["gwa", "ぐぁ", "グァ"],
- ["gwi", "ぐぃ", "グィ"],
- ["gwu", "ぐぅ", "グゥ"],
- ["gwe", "ぐぇ", "グェ"],
- ["gwo", "ぐぉ", "グォ"],
- ["sa", "さ", "サ"],
- ["si", "し", "シ"],
- ["su", "す", "ス"],
- ["se", "せ", "セ"],
- ["so", "そ", "ソ"],
- ["shi", "し", "シ"],
- ["za", "ざ", "ザ"],
- ["zi", "じ", "ジ"],
- ["zu", "ず", "ズ"],
- ["ze", "ぜ", "ゼ"],
- ["zo", "ぞ", "ゾ"],
- ["ji", "じ", "ジ"],
- ["sya", "しゃ", "シャ"],
- ["syi", "しぃ", "シィ"],
- ["syu", "しゅ", "シュ"],
- ["sye", "しぇ", "シェ"],
- ["syo", "しょ", "ショ"],
- ["sha", "しゃ", "シャ"],
- ["shu", "しゅ", "シュ"],
- ["she", "しぇ", "シェ"],
- ["sho", "しょ", "ショ"],
- ["shya", "しゃ", "シャ"],
- ["shyu", "しゅ", "シュ"],
- ["shye", "しぇ", "シェ"],
- ["shyo", "しょ", "ショ"],
- ["swa", "すぁ", "スァ"],
- ["swi", "すぃ", "スィ"],
- ["swu", "すぅ", "スゥ"],
- ["swe", "すぇ", "スェ"],
- ["swo", "すぉ", "スォ"],
- ["zya", "じゃ", "ジャ"],
- ["zyi", "じぃ", "ジィ"],
- ["zyu", "じゅ", "ジュ"],
- ["zye", "じぇ", "ジェ"],
- ["zyo", "じょ", "ジョ"],
- ["ja", "じゃ", "ジャ"],
- ["ju", "じゅ", "ジュ"],
- ["je", "じぇ", "ジェ"],
- ["jo", "じょ", "ジョ"],
- ["jya", "じゃ", "ジャ"],
- ["jyi", "じぃ", "ジィ"],
- ["jyu", "じゅ", "ジュ"],
- ["jye", "じぇ", "ジェ"],
- ["jyo", "じょ", "ジョ"],
- ["ta", "た", "タ"],
- ["ti", "ち", "チ"],
- ["tu", "つ", "ツ"],
- ["te", "て", "テ"],
- ["to", "と", "ト"],
- ["chi", "ち", "チ"],
- ["tsu", "つ", "ツ"],
- ["ltu", "っ", "ッ"],
- ["xtu", "っ", "ッ"],
- ["ltsu", "っ", "ッ"],
- ["tya", "ちゃ", "チャ"],
- ["tyi", "ちぃ", "チィ"],
- ["tyu", "ちゅ", "チュ"],
- ["tye", "ちぇ", "チェ"],
- ["tyo", "ちょ", "チョ"],
- ["cha", "ちゃ", "チャ"],
- ["chu", "ちゅ", "チュ"],
- ["che", "ちぇ", "チェ"],
- ["cho", "ちょ", "チョ"],
- ["cya", "ちゃ", "チャ"],
- ["cyi", "ちぃ", "チィ"],
- ["cyu", "ちゅ", "チュ"],
- ["cye", "ちぇ", "チェ"],
- ["cyo", "ちょ", "チョ"],
- ["chya", "ちゃ", "チャ"],
- ["chyu", "ちゅ", "チュ"],
- ["chye", "ちぇ", "チェ"],
- ["chyo", "ちょ", "チョ"],
- ["tsa", "つぁ", "ツァ"],
- ["tsi", "つぃ", "ツィ"],
- ["tse", "つぇ", "ツェ"],
- ["tso", "つぉ", "ツォ"],
- ["tha", "てゃ", "テャ"],
- ["thi", "てぃ", "ティ"],
- ["thu", "てゅ", "テュ"],
- ["the", "てぇ", "テェ"],
- ["tho", "てょ", "テョ"],
- ["twa", "とぁ", "トァ"],
- ["twi", "とぃ", "トィ"],
- ["twu", "とぅ", "トゥ"],
- ["twe", "とぇ", "トェ"],
- ["two", "とぉ", "トォ"],
- ["da", "だ", "ダ"],
- ["di", "ぢ", "ヂ"],
- ["du", "づ", "ヅ"],
- ["de", "で", "デ"],
- ["do", "ど", "ド"],
- ["dya", "ぢゃ", "ヂャ"],
- ["dyi", "ぢぃ", "ヂィ"],
- ["dyu", "ぢゅ", "ヂュ"],
- ["dye", "ぢぇ", "ヂェ"],
- ["dyo", "ぢょ", "ヂョ"],
- ["dha", "でゃ", "デャ"],
- ["dhi", "でぃ", "ディ"],
- ["dhu", "でゅ", "デュ"],
- ["dhe", "でぇ", "デェ"],
- ["dho", "でょ", "デョ"],
- ["dwa", "どぁ", "ドァ"],
- ["dwi", "どぃ", "ドィ"],
- ["dwu", "どぅ", "ドゥ"],
- ["dwe", "どぇ", "ドェ"],
- ["dwo", "どぉ", "ドォ"],
- ["na", "な", "ナ"],
- ["ni", "に", "ニ"],
- ["nu", "ぬ", "ヌ"],
- ["ne", "ね", "ネ"],
- ["no", "の", "ノ"],
- ["nya", "にゃ", "ニャ"],
- ["nyi", "にぃ", "ニィ"],
- ["nyu", "にゅ", "ニュ"],
- ["nye", "にぇ", "ニェ"],
- ["nyo", "にょ", "ニョ"],
- ["ha", "は", "ハ"],
- ["hi", "ひ", "ヒ"],
- ["hu", "ふ", "フ"],
- ["he", "へ", "ヘ"],
- ["ho", "ほ", "ホ"],
- ["fu", "ふ", "フ"],
- ["hya", "ひゃ", "ヒャ"],
- ["hyi", "ひぃ", "ヒィ"],
- ["hyu", "ひゅ", "ヒュ"],
- ["hye", "ひぇ", "ヒェ"],
- ["hyo", "ひょ", "ヒョ"],
- ["fya", "ふゃ", "フャ"],
- ["fyu", "ふゅ", "フュ"],
- ["fyo", "ふょ", "フョ"],
- ["fwa", "ふぁ", "ファ"],
- ["fwi", "ふぃ", "フィ"],
- ["fwu", "ふぅ", "フゥ"],
- ["fwe", "ふぇ", "フェ"],
- ["fwo", "ふぉ", "フォ"],
- ["fa", "ふぁ", "ファ"],
- ["fi", "ふぃ", "フィ"],
- ["fe", "ふぇ", "フェ"],
- ["fo", "ふぉ", "フォ"],
- ["fyi", "ふぃ", "フィ"],
- ["fye", "ふぇ", "フェ"],
- ["ba", "ば", "バ"],
- ["bi", "び", "ビ"],
- ["bu", "ぶ", "ブ"],
- ["be", "べ", "ベ"],
- ["bo", "ぼ", "ボ"],
- ["bya", "びゃ", "ビャ"],
- ["byi", "びぃ", "ビィ"],
- ["byu", "びゅ", "ビュ"],
- ["bye", "びぇ", "ビェ"],
- ["byo", "びょ", "ビョ"],
- ["pa", "ぱ", "パ"],
- ["pi", "ぴ", "ピ"],
- ["pu", "ぷ", "プ"],
- ["pe", "ぺ", "ペ"],
- ["po", "ぽ", "ポ"],
- ["pya", "ぴゃ", "ピャ"],
- ["pyi", "ぴぃ", "ピィ"],
- ["pyu", "ぴゅ", "ピュ"],
- ["pye", "ぴぇ", "ピェ"],
- ["pyo", "ぴょ", "ピョ"],
- ["ma", "ま", "マ"],
- ["mi", "み", "ミ"],
- ["mu", "む", "ム"],
- ["me", "め", "メ"],
- ["mo", "も", "モ"],
- ["mya", "みゃ", "ミャ"],
- ["myi", "みぃ", "ミィ"],
- ["myu", "みゅ", "ミュ"],
- ["mye", "みぇ", "ミェ"],
- ["myo", "みょ", "ミョ"],
- ["ya", "や", "ヤ"],
- ["yu", "ゆ", "ユ"],
- ["yo", "よ", "ヨ"],
- ["xya", "ゃ", "ャ"],
- ["xyu", "ゅ", "ュ"],
- ["xyo", "ょ", "ョ"],
- ["ra", "ら", "ラ"],
- ["ri", "り", "リ"],
- ["ru", "る", "ル"],
- ["re", "れ", "レ"],
- ["ro", "ろ", "ロ"],
- ["rya", "りゃ", "リャ"],
- ["ryi", "りぃ", "リィ"],
- ["ryu", "りゅ", "リュ"],
- ["rye", "りぇ", "リェ"],
- ["ryo", "りょ", "リョ"],
- ["wa", "わ", "ワ"],
- ["wo", "を", "ヲ"],
- ["lwa", "ゎ", "ヮ"],
- ["xwa", "ゎ", "ヮ"],
- ["n", "ん", "ン"],
- ["nn", "んん", "ンン"],
- ["xn", "ん", "ン"],
- // double consonants
- ["atta", "あった", "アッタ"],
- ["gakkounakatta", "がっこうなかった", "ガッコウナカッタ"],
- ["babba", "ばっば", "バッバ"],
- ["cacca", "かっか", "カッカ"],
- ["chaccha", "ちゃっちゃ", "チャッチャ"],
- ["dadda", "だっだ", "ダッダ"],
- ["fuffu", "ふっふ", "フッフ"],
- ["gagga", "がっが", "ガッガ"],
- ["hahha", "はっは", "ハッハ"],
- ["jajja", "じゃっじゃ", "ジャッジャ"],
- ["kakka", "かっか", "カッカ"],
- ["mamma", "まっま", "マッマ"],
- ["nanna", "なんな", "ナンナ"],
- ["pappa", "ぱっぱ", "パッパ"],
- ["qaqqa", "くぁっくぁ", "クァックァ"],
- ["rarra", "らっら", "ラッラ"],
- ["sassa", "さっさ", "サッサ"],
- ["shassha", "しゃっしゃ", "シャッシャ"],
- ["tatta", "たった", "タッタ"],
- ["tsuttsu", "つっつ", "ツッツ"],
- ["vavva", "ゔぁっゔぁ", "ヴァッヴァ"],
- ["wawwa", "わっわ", "ワッワ"],
- ["yayya", "やっや", "ヤッヤ"],
- ["zazza", "ざっざ", "ザッザ"],
-];
-
-#[allow(dead_code)]
-pub const HIRA_KATA_TO_ROMA: [[&str; 3]; 192] = [
- // symbols that should all be the same after conversion
- ["ヶ", "ヶ", "ヶ"],
- ["ヵ", "ヵ", "ヵ"],
- ["1", "1", "1"],
- ["@", "@", "@"],
- ["#", "#", "#"],
- ["$", "$", "$"],
- ["%", "%", "%"],
- // quick brown fox / iroha
- ["いろはにほへと", "イロハニホヘト", "irohanihoheto"],
- ["ちりぬるを", "チリヌルヲ", "chirinuruwo"],
- ["わかよたれそ", "ワカヨタレソ", "wakayotareso"],
- ["つねならむ", "ツネナラム", "tsunenaramu"],
- ["うゐのおくやま", "ウヰノオクヤマ", "uwinookuyama"],
- ["けふこえて", "ケフコエテ", "kefukoete"],
- ["あさきゆめみし", "アサキユメミシ", "asakiyumemishi"],
- ["ゑひもせすん", "ヱヒモセスン", "wehimosesun"],
- // should all convert
- ["!", "!", "!"],
- ["?", "?", "?"],
- ["。", "。", "."],
- [":", ":", ":"],
- ["・", "・", "/"],
- ["、", "、", ","],
- ["〜", "〜", "~"],
- ["ー", "ー", "-"],
- ["「", "「", "‘"],
- ["」", "」", "’"],
- ["『", "『", "“"],
- ["』", "』", "”"],
- ["[", "[", "["],
- ["]", "]", "]"],
- ["(", "(", "("],
- [")", ")", ")"],
- ["{", "{", "{"],
- ["}", "}", "}"],
- // hepburn
- ["か", "カ", "ka"],
- ["き", "キ", "ki"],
- ["く", "ク", "ku"],
- ["け", "ケ", "ke"],
- ["こ", "コ", "ko"],
- ["きゃ", "キャ", "kya"],
- ["きゅ", "キュ", "kyu"],
- ["きょ", "キョ", "kyo"],
- ["さ", "サ", "sa"],
- ["し", "シ", "shi"],
- ["す", "ス", "su"],
- ["せ", "セ", "se"],
- ["そ", "ソ", "so"],
- ["しゃ", "シャ", "sha"],
- ["しゅ", "シュ", "shu"],
- ["しょ", "ショ", "sho"],
- ["た", "タ", "ta"],
- ["ち", "チ", "chi"],
- ["つ", "ツ", "tsu"],
- ["て", "テ", "te"],
- ["と", "ト", "to"],
- ["ちゃ", "チャ", "cha"],
- ["ちゅ", "チュ", "chu"],
- ["ちょ", "チョ", "cho"],
- ["な", "ナ", "na"],
- ["に", "ニ", "ni"],
- ["ぬ", "ヌ", "nu"],
- ["ね", "ネ", "ne"],
- ["の", "ノ", "no"],
- ["にゃ", "ニャ", "nya"],
- ["にゅ", "ニュ", "nyu"],
- ["にょ", "ニョ", "nyo"],
- ["は", "ハ", "ha"],
- ["ひ", "ヒ", "hi"],
- ["ふ", "フ", "fu"],
- ["へ", "ヘ", "he"],
- ["ほ", "ホ", "ho"],
- ["ひゃ", "ヒャ", "hya"],
- ["ひゅ", "ヒュ", "hyu"],
- ["ひょ", "ヒョ", "hyo"],
- ["ま", "マ", "ma"],
- ["み", "ミ", "mi"],
- ["む", "ム", "mu"],
- ["め", "メ", "me"],
- ["も", "モ", "mo"],
- ["みゃ", "ミャ", "mya"],
- ["みゅ", "ミュ", "myu"],
- ["みょ", "ミョ", "myo"],
- ["ら", "ラ", "ra"],
- ["り", "リ", "ri"],
- ["る", "ル", "ru"],
- ["れ", "レ", "re"],
- ["ろ", "ロ", "ro"],
- ["りゃ", "リャ", "rya"],
- ["りゅ", "リュ", "ryu"],
- ["りょ", "リョ", "ryo"],
- ["や", "ヤ", "ya"],
- ["ゆ", "ユ", "yu"],
- ["よ", "ヨ", "yo"],
- ["わ", "ワ", "wa"],
- ["ゐ", "ヰ", "wi"],
- ["ゑ", "ヱ", "we"],
- ["を", "ヲ", "wo"],
- // dakuten
- ["が", "ガ", "ga"],
- ["ぎ", "ギ", "gi"],
- ["ぐ", "グ", "gu"],
- ["げ", "ゲ", "ge"],
- ["ご", "ゴ", "go"],
- ["ぎゃ", "ギャ", "gya"],
- ["ぎゅ", "ギュ", "gyu"],
- ["ぎょ", "ギョ", "gyo"],
- ["ざ", "ザ", "za"],
- ["じ", "ジ", "ji"],
- ["ず", "ズ", "zu"],
- ["ぜ", "ゼ", "ze"],
- ["ぞ", "ゾ", "zo"],
- ["じゃ", "ジャ", "ja"],
- ["じゅ", "ジュ", "ju"],
- ["じょ", "ジョ", "jo"],
- ["だ", "ダ", "da"],
- ["ぢ", "ヂ", "ji"],
- ["づ", "ヅ", "zu"],
- ["で", "デ", "de"],
- ["ど", "ド", "do"],
- ["ぢゃ", "ヂャ", "ja"],
- ["ぢゅ", "ヂュ", "ju"],
- ["ぢょ", "ヂョ", "jo"],
- ["ば", "バ", "ba"],
- ["び", "ビ", "bi"],
- ["ぶ", "ブ", "bu"],
- ["べ", "ベ", "be"],
- ["ぼ", "ボ", "bo"],
- ["びゃ", "ビャ", "bya"],
- ["びゅ", "ビュ", "byu"],
- ["びょ", "ビョ", "byo"],
- ["ぱ", "パ", "pa"],
- ["ぴ", "ピ", "pi"],
- ["ぷ", "プ", "pu"],
- ["ぺ", "ペ", "pe"],
- ["ぽ", "ポ", "po"],
- ["ぴゃ", "ピャ", "pya"],
- ["ぴゅ", "ピュ", "pyu"],
- ["ぴょ", "ピョ", "pyo"],
- // little kana
- ["ぁ", "ァ", "a"],
- ["ぃ", "ィ", "i"],
- ["ぅ", "ゥ", "u"],
- ["ぇ", "ェ", "e"],
- ["ぉ", "ォ", "o"],
- ["っ", "ッ", ""],
- ["ゃ", "ャ", "ya"],
- ["ゅ", "ュ", "yu"],
- ["ょ", "ョ", "yo"],
- // n
- ["ん", "ン", "n"],
- ["んん", "ンン", "nn"],
- ["あんない", "アンナイ", "annai"],
- ["ぐんま", "グンマ", "gunma"],
- // double consonants
- ["あった", "アッタ", "atta"],
- ["がっこうなかった", "ガッコウナカッタ", "gakkounakatta"],
- ["けっか", "ケッカ", "kekka"],
- ["さっさと", "サッサト", "sassato"],
- ["ずっと", "ズット", "zutto"],
- ["きっぷ", "キップ", "kippu"],
- ["ざっし", "ザッシ", "zasshi"],
- ["いっしょ", "イッショ", "issho"],
- ["こっち", "コッチ", "kotchi"],
- ["まっちゃ", "マッチャ", "matcha"],
- ["みっつ", "ミッツ", "mittsu"],
- ["ばっば", "バッバ", "babba"],
- ["かっか", "カッカ", "kakka"],
- ["ちゃっちゃ", "チャッチャ", "chatcha"],
- ["だっだ", "ダッダ", "dadda"],
- ["ふっふ", "フッフ", "fuffu"],
- ["がっが", "ガッガ", "gagga"],
- ["はっは", "ハッハ", "hahha"],
- ["じゃっじゃ", "ジャッジャ", "jajja"],
- ["かっか", "カッカ", "kakka"],
- ["まっま", "マッマ", "mamma"],
- ["なんな", "ナンナ", "nanna"],
- ["ぱっぱ", "パッパ", "pappa"],
- ["らっら", "ラッラ", "rarra"],
- ["さっさ", "サッサ", "sassa"],
- ["しゃっしゃ", "シャッシャ", "shassha"],
- ["たった", "タッタ", "tatta"],
- ["つっつ", "ツッツ", "tsuttsu"],
- ["わっわ", "ワッワ", "wawwa"],
- ["ざっざ", "ザッザ", "zazza"],
- // hira long vowels
- ["がっこう", "", "gakkou"],
- ["とうきょう", "", "toukyou"],
- ["べんきょう", "", "benkyou"],
- ["でんぽう", "", "denpou"],
- ["きんようび", "", "kin'youbi"],
- ["こうし", "", "koushi"],
- // kata long vowels
- ["", "セーラー", "seeraa"],
- ["", "パーティー", "paateii"],
- ["", "ヒーター", "hiitaa"],
- ["", "タクシー", "takushii"],
- ["", "スーパーマン", "suupaaman"],
- ["", "バレーボール", "bareebooru"],
- ["", "ソール", "sooru"],
-];
diff --git a/wana_kana_rust/tests/is_japanese.rs b/wana_kana_rust/tests/is_japanese.rs
deleted file mode 100644
index 14e0316..0000000
--- a/wana_kana_rust/tests/is_japanese.rs
+++ /dev/null
@@ -1,80 +0,0 @@
-#[cfg(test)]
-mod tests {
- use wana_kana::IsJapaneseStr;
-
- #[test]
- fn sane_defaults() {
- assert_eq!("".is_japanese(), false);
- }
- #[test]
- fn 泣き虫_is_japanese() {
- assert_eq!("泣き虫".is_japanese(), true);
- }
-
- #[cfg(feature = "enable_regex")]
- #[test]
- fn is_japanese_with_whitelist_test() {
- use regex::Regex;
- assert_eq!(
- ("≪偽括弧≫".is_japanese_with_whitelist(Some(&Regex::new(r"[≪≫]").unwrap()))),
- true
- );
- }
- #[test]
- fn あア_is_japanese() {
- assert_eq!(("あア".is_japanese()), true);
- }
- #[test]
- fn a泣き虫_is_not_japanese() {
- assert_eq!(("A泣き虫".is_japanese()), false);
- }
- #[test]
- fn a_is_not_japanese() {
- assert_eq!(("A".is_japanese()), false);
- }
- #[test]
- fn ja_space_is_japanese() {
- assert_eq!((" ".is_japanese()), true);
- }
- #[test]
- fn en_space_is_not_japanese() {
- assert_eq!((" ".is_japanese()), false);
- }
- #[test]
- fn kanji_with_zenkaku_punctuation_is_japanese() {
- assert_eq!(
- "泣き虫。#!〜〈〉《》〔〕[]【】(){}〝〟".is_japanese(),
- true
- );
- }
- #[test]
- fn kanji_with_romaji_punctuation_is_not_japanese() {
- assert_eq!(("泣き虫.!~".is_japanese()), false);
- }
- #[test]
- fn zenkaku_numbers_are_considered_neutral() {
- assert_eq!(("0123456789".is_japanese()), true);
- }
- #[test]
- fn latin_numbers_are_not_japanese() {
- assert_eq!(("0123456789".is_japanese()), false);
- }
- #[test]
- fn zenkaku_latin_letters_are_considered_neutral() {
- assert_eq!(("MeToo".is_japanese()), true);
- }
- #[test]
- fn mixed_with_numbers_is_japanese() {
- assert_eq!(("2011年".is_japanese()), true);
- }
- #[test]
- fn hankaku_katakana_is_allowed() {
- assert_eq!(("ハンカクカタカナ".is_japanese()), true);
- }
- #[test]
- fn randomly_sliced_nhk_news_text_is_japanese() {
- assert_eq!(
- "#MeToo、これを前に「KUROSHIO」は、都内で報道陣を前に水中探査ロボットの最終点検の様子を公開しました。イルカのような形をした探査ロボットは、全長3メートル、重さは350キロあります。《はじめに》冒頭、安倍総理大臣は、ことしが明治元年から150年にあたることに触れ「明治という新しい時代が育てたあまたの人材が、技術優位の欧米諸国が迫る『国難』とも呼ぶべき危機の中で、わが国が急速に近代化を遂げる原動力となった。今また、日本は少子高齢化という『国難』とも呼ぶべき危機に直面している。もう1度、あらゆる日本人にチャンスを創ることで、少子高齢化も克服できる」と呼びかけました。《働き方改革》続いて安倍総理大臣は、具体的な政策課題の最初に「働き方改革」を取り上げ、「戦後の労働基準法制定以来、70年ぶりの大改革だ。誰もが生きがいを感じて、その能力を思う存分発揮すれば少子高齢化も克服できる」と述べました。そして、同一労働同一賃金の実現や、時間外労働の上限規制の導入、それに労働時間でなく成果で評価するとして労働時間の規制から外す「高度プロフェッショナル制度」の創設などに取り組む考えを強調しました。".is_japanese()
- , true)
- }
-}
diff --git a/wana_kana_rust/tests/punctuation.rs b/wana_kana_rust/tests/punctuation.rs
deleted file mode 100644
index 8b13789..0000000
--- a/wana_kana_rust/tests/punctuation.rs
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/wana_kana_rust/tests/tests.rs b/wana_kana_rust/tests/tests.rs
deleted file mode 100644
index 7aa7b9f..0000000
--- a/wana_kana_rust/tests/tests.rs
+++ /dev/null
@@ -1,278 +0,0 @@
-use wana_kana::Options;
-
-mod conversion_tables;
-use conversion_tables::*;
-
-#[cfg(test)]
-mod tests {
- use wana_kana::ConvertJapanese;
-
- use super::*;
-
- mod character_conversion {
- use super::*;
-
- mod test_every_conversion_table_char {
-
- use super::*;
- #[test]
- fn to_kana_test() {
- for &[romaji, hiragana, katakana] in ROMA_TO_HIRA_KATA.iter() {
- let lower = romaji.to_kana();
- let upper = (&romaji.to_uppercase()).to_kana();
- assert_eq!(lower, hiragana);
- assert_eq!(upper, katakana);
- }
- }
-
- #[test]
- fn to_hiragana_test() {
- for &[romaji, hiragana, _katakana] in ROMA_TO_HIRA_KATA.iter() {
- let lower = romaji.to_hiragana();
- let upper = (&romaji.to_uppercase()).to_hiragana();
- assert_eq!(lower, hiragana);
- assert_eq!(upper, hiragana);
- }
- }
-
- #[test]
- fn hiragana_input_to_romaji() {
- for &[hiragana, _, romaji] in HIRA_KATA_TO_ROMA.iter() {
- if !hiragana.is_empty() {
- assert_eq!(hiragana.to_romaji(), romaji);
- }
- }
- }
-
- #[test]
- fn katakana_input_to_romaji() {
- for &[_, katakana, romaji] in HIRA_KATA_TO_ROMA.iter() {
- if !katakana.is_empty() {
- assert_eq!(katakana.to_romaji(), romaji);
- }
- }
- }
- }
-
- mod converting_kana_to_kana {
- use super::*;
- #[test]
- fn k_to_h() {
- assert_eq!("バケル".to_hiragana(), "ばける");
- }
- #[test]
- fn h_to_k() {
- assert_eq!(("ばける".to_katakana()), "バケル");
- }
-
- #[test]
- fn it_survives_only_katakana_to_katakana() {
- assert_eq!(("スタイル".to_katakana()), "スタイル");
- }
- #[test]
- fn it_survives_only_hiragana_to_hiragana() {
- assert_eq!(("すたーいる".to_hiragana()), "すたーいる");
- }
- #[test]
- fn mixed_kana_converts_every_char_k_to_h() {
- assert_eq!(("アメリカじん".to_katakana()), "アメリカジン");
- }
- #[test]
- fn mixed_kana_converts_every_char_h_to_k() {
- assert_eq!(("アメリカじん".to_hiragana()), "あめりかじん");
- }
- }
- mod long_vowels {
- use super::*;
- #[test]
- fn converts_long_vowels_correctly_from_k_to_h() {
- assert_eq!(("バツゴー".to_hiragana()), "ばつごう");
- }
- #[test]
- fn preserves_long_dash_from_h_to_k() {
- assert_eq!("ばつゲーム".to_katakana(), "バツゲーム");
- }
- #[test]
- fn preserves_long_dash_from_h_to_h() {
- assert_eq!("ばつげーむ".to_hiragana(), "ばつげーむ");
- }
- #[test]
- fn preserves_long_dash_from_k_to_k() {
- assert_eq!("バツゲーム".to_katakana(), "バツゲーム");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_k_1() {
- assert_eq!("バツゲーム".to_katakana(), "バツゲーム");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_k_2() {
- assert_eq!("テスーと".to_katakana(), "テスート");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_h_1() {
- assert_eq!("てすート".to_hiragana(), "てすーと");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_h_2() {
- assert_eq!("てすー戸".to_hiragana(), "てすー戸");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_h_3() {
- assert_eq!("手巣ート".to_hiragana(), "手巣ーと");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_h_4() {
- assert_eq!("tesート".to_hiragana(), "てsーと");
- }
- #[test]
- fn preserves_long_dash_from_mixed_to_h_5() {
- assert_eq!("ートtesu".to_hiragana(), "ーとてす");
- }
- }
-
- mod mixed_syllabaries {
- use super::*;
- #[test]
- fn it_passes_non_katakana_through_when_pass_romaji_is_true_k_to_h() {
- assert_eq!(
- "座禅‘zazen’スタイル".to_hiragana_with_opt(Options {
- pass_romaji: true,
- ..Default::default()
- }),
- "座禅‘zazen’すたいる"
- );
- }
- #[test]
- fn it_passes_non_hiragana_through_when_pass_romaji_is_true_h_to_k() {
- assert_eq!(
- "座禅‘zazen’すたいる".to_katakana_with_opt(Options {
- pass_romaji: true,
- ..Default::default()
- }),
- "座禅‘zazen’スタイル"
- );
- }
- #[test]
- fn it_converts_non_katakana_when_pass_romaji_is_false_k_to_h() {
- assert_eq!(
- "座禅‘zazen’スタイル".to_hiragana(),
- "座禅「ざぜん」すたいる"
- );
- }
- #[test]
- fn it_converts_non_hiragana_when_pass_romaji_is_false_h_to_k() {
- assert_eq!(
- "座禅‘zazen’すたいる".to_katakana(),
- "座禅「ザゼン」スタイル"
- );
- }
- }
- }
-
- mod case_sensitivity {
-
- use super::*;
- #[test]
- fn c_ase_do_esn_t_mat_ter_for_to_hiragana() {
- assert_eq!("aiueo".to_hiragana(), "AIUEO".to_hiragana());
- }
- #[test]
- fn c_ase_do_esn_t_mat_ter_for_to_katakana() {
- assert_eq!("aiueo".to_katakana(), "AIUEO".to_katakana());
- }
- #[test]
- fn case_does_matter_for_to_kana() {
- assert_ne!("aiueo".to_kana(), "AIUEO".to_kana());
- }
- }
-
- mod n_edge_cases {
-
- use super::*;
- #[test]
- fn solo_n() {
- assert_eq!("n".to_kana(), "ん");
- }
- #[test]
- fn double_n() {
- assert_eq!("onn".to_kana(), "おんん");
- }
- #[test]
- fn n_followed_by_n_syllable() {
- assert_eq!("onna".to_kana(), "おんな");
- }
- #[test]
- fn triple_n() {
- assert_eq!("nnn".to_kana(), "んんん");
- }
- #[test]
- fn triple_n_followed_by_n_syllable() {
- assert_eq!("onnna".to_kana(), "おんんな");
- }
- #[test]
- fn quadruple_n() {
- assert_eq!("nnnn".to_kana(), "んんんん");
- }
- #[test]
- fn nya_to_にゃ() {
- assert_eq!("nyan".to_kana(), "にゃん");
- }
- #[test]
- fn nnya_to_んにゃ() {
- assert_eq!("nnyann".to_kana(), "んにゃんん");
- }
- #[test]
- fn nnnya_to_んにゃ() {
- assert_eq!("nnnyannn".to_kana(), "んんにゃんんん");
- }
- #[test]
- fn nya_to_んや() {
- assert_eq!("n'ya".to_kana(), "んや");
- }
- #[test]
- fn kinya_to_きんや() {
- assert_eq!("kin'ya".to_kana(), "きんや");
- }
- #[test]
- fn shinya_to_しんや() {
- assert_eq!("shin'ya".to_kana(), "しんや");
- }
- #[test]
- fn kinyou_to_きにょう() {
- assert_eq!("kinyou".to_kana(), "きにょう");
- }
- #[test]
- fn kinyou_to_きんよう() {
- assert_eq!("kin'you".to_kana(), "きんよう");
- }
- #[test]
- fn kinyu_to_きんゆ() {
- assert_eq!("kin'yu".to_kana(), "きんゆ");
- }
- #[test]
- fn properly_add_space_after_nspace() {
- assert_eq!("ichiban warui".to_kana(), "いちばん わるい");
- }
- }
-
- mod bogus_4_character_sequences {
-
- use super::*;
- #[test]
- fn non_bogus_sequences_work() {
- assert_eq!("chya".to_kana(), "ちゃ");
- }
- #[test]
- fn bogus_sequences_do_not_work() {
- assert_eq!("chyx".to_kana(), "chyx");
- }
- #[test]
- fn bogus_sequences_do_not_work_2() {
- assert_eq!("shyp".to_kana(), "shyp");
- }
- #[test]
- fn bogus_sequences_do_not_work_3() {
- assert_eq!("ltsb".to_kana(), "ltsb");
- }
- }
-}
diff --git a/wana_kana_rust/tests/tokenize.rs b/wana_kana_rust/tests/tokenize.rs
deleted file mode 100644
index 8f9cac1..0000000
--- a/wana_kana_rust/tests/tokenize.rs
+++ /dev/null
@@ -1,122 +0,0 @@
-#[cfg(feature = "tokenize")]
-use wana_kana::tokenize::*;
-
-#[cfg(feature = "tokenize")]
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn tokenize_with_no_input() {
- let empty: Vec = vec![];
- assert_eq!(tokenize(""), empty);
- }
-
- #[test]
- fn passes_basic_tests() {
- assert_eq!(tokenize("ふふ"), vec!["ふふ"]);
- assert_eq!(tokenize("フフ"), vec!["フフ"]);
- assert_eq!(tokenize("ふふフフ"), vec!["ふふ", "フフ"]);
- assert_eq!(tokenize("阮咸"), vec!["阮咸"]);
- assert_eq!(tokenize("感じ"), vec!["感", "じ"]);
- assert_eq!(tokenize("私は悲しい"), vec!["私", "は", "悲", "しい"]);
- assert_eq!(tokenize("ok لنذهب!"), vec!["ok", " ", "لنذهب", "!"]);
- assert_eq!(
- tokenize("what the...私は「悲しい」。"),
- vec!["what", " ", "the", "...", "私", "は", "「", "悲", "しい", "」。",]
- );
- }
-
- #[test]
- fn handles_mixed_input() {
- assert_eq!(
- tokenize("5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。!"),
- vec![
- "5",
- "romaji",
- " ",
- "here",
- "...!?",
- "漢字",
- "ひらがな",
- "カタ",
- " ",
- "カナ",
- "4",
- "「",
- "SHIO",
- "」。!",
- ]
- );
- }
-
- #[test]
- fn handles_mixed_input_compact_option() {
- assert_eq!(
- tokenize_with_opt(
- "5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب",
- true
- ),
- vec![
- "5",
- "romaji here",
- "...!?",
- "漢字ひらがなカタ カナ",
- "4「",
- "SHIO",
- "」。!",
- " ",
- "لنذهب",
- ]
- );
- }
-
- #[test]
- fn handles_mixed_input_detailed_option() {
- assert_eq!(
- tokenize_detailed(
- "5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب",
- false
- ),
- vec![
- (TokenType::EnNum, "5".to_string()),
- (TokenType::En, "romaji".to_string()),
- (TokenType::Space, " ".to_string()),
- (TokenType::En, "here".to_string()),
- (TokenType::EnPunc, "...!?".to_string()),
- (TokenType::Kanji, "漢字".to_string()),
- (TokenType::Hiragana, "ひらがな".to_string()),
- (TokenType::Katakana, "カタ".to_string()),
- (TokenType::Space, " ".to_string()),
- (TokenType::Katakana, "カナ".to_string()),
- (TokenType::JaNum, "4".to_string()),
- (TokenType::JaPunc, "「".to_string()),
- (TokenType::Ja, "SHIO".to_string()),
- (TokenType::JaPunc, "」。!".to_string()),
- (TokenType::Space, " ".to_string()),
- (TokenType::Other, "لنذهب".to_string()),
- ]
- );
- }
-
- #[test]
- fn handles_mixed_input_detailed_and_compact_option() {
- assert_eq!(
- tokenize_detailed(
- "5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب",
- true
- ),
- vec![
- (TokenType::Other, "5".to_string()),
- (TokenType::En, "romaji here".to_string()),
- (TokenType::Other, "...!?".to_string()),
- (TokenType::Ja, "漢字ひらがなカタ カナ".to_string()),
- (TokenType::Other, "4「".to_string()),
- (TokenType::Ja, "SHIO".to_string()),
- (TokenType::Other, "」。!".to_string()),
- (TokenType::En, " ".to_string()),
- (TokenType::Other, "لنذهب".to_string()),
- ]
- );
- }
-}
diff --git a/wana_kana_rust/tests/trim_okurigana.rs b/wana_kana_rust/tests/trim_okurigana.rs
deleted file mode 100644
index e5757a7..0000000
--- a/wana_kana_rust/tests/trim_okurigana.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-#[cfg(feature = "tokenize")]
-use wana_kana::trim_okurigana::*;
-
-#[cfg(feature = "tokenize")]
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn trim_okurigana_with_no_input() {
- assert_eq!(trim_okurigana(""), "");
- }
-
- #[test]
- fn passes_default_parameter_tests() {
- assert_eq!(trim_okurigana("踏み込む"), "踏み込");
- assert_eq!(trim_okurigana("使い方"), "使い方");
- assert_eq!(trim_okurigana("申し申し"), "申し申");
- assert_eq!(trim_okurigana("お腹"), "お腹");
- assert_eq!(trim_okurigana("お祝い"), "お祝");
- }
-
- #[test]
- fn strips_leading_when_passed_optional_config() {
- assert_eq!(trim_okurigana_with_opt("踏み込む", true, None), "踏み込む");
- assert_eq!(trim_okurigana_with_opt("お腹", true, None), "腹");
- assert_eq!(trim_okurigana_with_opt("お祝い", true, None), "祝い");
- }
-
- #[test]
- fn strips_reading_by_matching_original_word_when_passed_match_kanji() {
- assert_eq!(
- trim_okurigana_with_opt("おはら", false, Some("お腹")),
- "おはら"
- );
- assert_eq!(
- trim_okurigana_with_opt("おはら", true, Some("お腹")),
- "はら"
- );
- assert_eq!(
- trim_okurigana_with_opt("ふみこむ", false, Some("踏み込む")),
- "ふみこ"
- );
- assert_eq!(
- trim_okurigana_with_opt("おみまい", true, Some("お祝い")),
- "みまい"
- );
- }
-}
diff --git a/wana_kana_rust/upstream_conversions/.gitignore b/wana_kana_rust/upstream_conversions/.gitignore
deleted file mode 100644
index 143b1ca..0000000
--- a/wana_kana_rust/upstream_conversions/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-
-/target/
-**/*.rs.bk
-Cargo.lock
diff --git a/wana_kana_rust/upstream_conversions/Cargo.toml b/wana_kana_rust/upstream_conversions/Cargo.toml
deleted file mode 100644
index 248f1c8..0000000
--- a/wana_kana_rust/upstream_conversions/Cargo.toml
+++ /dev/null
@@ -1,10 +0,0 @@
-[package]
-name = "upstream_conversions"
-version = "0.1.0"
-authors = ["Pascal Seitz "]
-edition = "2018"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-serde_json = "1.0.41"
diff --git a/wana_kana_rust/upstream_conversions/src/bin/to_kana_tree.rs b/wana_kana_rust/upstream_conversions/src/bin/to_kana_tree.rs
deleted file mode 100644
index 40597bc..0000000
--- a/wana_kana_rust/upstream_conversions/src/bin/to_kana_tree.rs
+++ /dev/null
@@ -1,1928 +0,0 @@
-#![recursion_limit = "256"]
-#![feature(slice_concat_ext)]
-
-#[macro_use]
-extern crate serde_json;
-use serde_json::value::Value;
-
-#[derive(Debug)]
-struct Node {
- pub transitions: Vec<(char, Node)>,
- // pub output: &'static str
- pub output: Option,
-}
-
-fn main() {
- let val = json!({
- "a": {
- "": "あ"
- },
- "i": {
- "": "い"
- },
- "u": {
- "": "う"
- },
- "e": {
- "": "え"
- },
- "o": {
- "": "お"
- },
- "k": {
- "a": {
- "": "か"
- },
- "i": {
- "": "き"
- },
- "u": {
- "": "く"
- },
- "e": {
- "": "け"
- },
- "o": {
- "": "こ"
- },
- "y": {
- "a": {
- "": "きゃ"
- },
- "i": {
- "": "きぃ"
- },
- "u": {
- "": "きゅ"
- },
- "e": {
- "": "きぇ"
- },
- "o": {
- "": "きょ"
- }
- },
- "w": {
- "a": {
- "": "くぁ"
- }
- },
- "k": {
- "a": {
- "": "っか"
- },
- "i": {
- "": "っき"
- },
- "u": {
- "": "っく"
- },
- "e": {
- "": "っけ"
- },
- "o": {
- "": "っこ"
- },
- "y": {
- "a": {
- "": "っきゃ"
- },
- "i": {
- "": "っきぃ"
- },
- "u": {
- "": "っきゅ"
- },
- "e": {
- "": "っきぇ"
- },
- "o": {
- "": "っきょ"
- }
- },
- "w": {
- "a": {
- "": "っくぁ"
- }
- }
- }
- },
- "s": {
- "a": {
- "": "さ"
- },
- "i": {
- "": "し"
- },
- "u": {
- "": "す"
- },
- "e": {
- "": "せ"
- },
- "o": {
- "": "そ"
- },
- "y": {
- "a": {
- "": "しゃ"
- },
- "i": {
- "": "しぃ"
- },
- "u": {
- "": "しゅ"
- },
- "e": {
- "": "しぇ"
- },
- "o": {
- "": "しょ"
- }
- },
- "w": {
- "a": {
- "": "すぁ"
- },
- "i": {
- "": "すぃ"
- },
- "u": {
- "": "すぅ"
- },
- "e": {
- "": "すぇ"
- },
- "o": {
- "": "すぉ"
- }
- },
- "h": {
- "a": {
- "": "しゃ"
- },
- "i": {
- "": "し"
- },
- "u": {
- "": "しゅ"
- },
- "e": {
- "": "しぇ"
- },
- "o": {
- "": "しょ"
- },
- "y": {
- "a": {
- "": "しゃ"
- },
- "i": {
- "": "しぃ"
- },
- "u": {
- "": "しゅ"
- },
- "e": {
- "": "しぇ"
- },
- "o": {
- "": "しょ"
- }
- }
- },
- "s": {
- "a": {
- "": "っさ"
- },
- "i": {
- "": "っし"
- },
- "u": {
- "": "っす"
- },
- "e": {
- "": "っせ"
- },
- "o": {
- "": "っそ"
- },
- "y": {
- "a": {
- "": "っしゃ"
- },
- "i": {
- "": "っしぃ"
- },
- "u": {
- "": "っしゅ"
- },
- "e": {
- "": "っしぇ"
- },
- "o": {
- "": "っしょ"
- }
- },
- "w": {
- "a": {
- "": "っすぁ"
- },
- "i": {
- "": "っすぃ"
- },
- "u": {
- "": "っすぅ"
- },
- "e": {
- "": "っすぇ"
- },
- "o": {
- "": "っすぉ"
- }
- },
- "h": {
- "a": {
- "": "っしゃ"
- },
- "i": {
- "": "っし"
- },
- "u": {
- "": "っしゅ"
- },
- "e": {
- "": "っしぇ"
- },
- "o": {
- "": "っしょ"
- },
- "y": {
- "a": {
- "": "っしゃ"
- },
- "i": {
- "": "っしぃ"
- },
- "u": {
- "": "っしゅ"
- },
- "e": {
- "": "っしぇ"
- },
- "o": {
- "": "っしょ"
- }
- }
- }
- }
- },
- "t": {
- "a": {
- "": "た"
- },
- "i": {
- "": "ち"
- },
- "u": {
- "": "つ"
- },
- "e": {
- "": "て"
- },
- "o": {
- "": "と"
- },
- "y": {
- "a": {
- "": "ちゃ"
- },
- "i": {
- "": "ちぃ"
- },
- "u": {
- "": "ちゅ"
- },
- "e": {
- "": "ちぇ"
- },
- "o": {
- "": "ちょ"
- }
- },
- "s": {
- "a": {
- "": "つぁ"
- },
- "i": {
- "": "つぃ"
- },
- "u": {
- "": "つ"
- },
- "e": {
- "": "つぇ"
- },
- "o": {
- "": "つぉ"
- }
- },
- "h": {
- "a": {
- "": "てゃ"
- },
- "i": {
- "": "てぃ"
- },
- "u": {
- "": "てゅ"
- },
- "e": {
- "": "てぇ"
- },
- "o": {
- "": "てょ"
- }
- },
- "w": {
- "a": {
- "": "とぁ"
- },
- "i": {
- "": "とぃ"
- },
- "u": {
- "": "とぅ"
- },
- "e": {
- "": "とぇ"
- },
- "o": {
- "": "とぉ"
- }
- },
- "t": {
- "a": {
- "": "った"
- },
- "i": {
- "": "っち"
- },
- "u": {
- "": "っつ"
- },
- "e": {
- "": "って"
- },
- "o": {
- "": "っと"
- },
- "y": {
- "a": {
- "": "っちゃ"
- },
- "i": {
- "": "っちぃ"
- },
- "u": {
- "": "っちゅ"
- },
- "e": {
- "": "っちぇ"
- },
- "o": {
- "": "っちょ"
- }
- },
- "s": {
- "a": {
- "": "っつぁ"
- },
- "i": {
- "": "っつぃ"
- },
- "u": {
- "": "っつ"
- },
- "e": {
- "": "っつぇ"
- },
- "o": {
- "": "っつぉ"
- }
- },
- "h": {
- "a": {
- "": "ってゃ"
- },
- "i": {
- "": "ってぃ"
- },
- "u": {
- "": "ってゅ"
- },
- "e": {
- "": "ってぇ"
- },
- "o": {
- "": "ってょ"
- }
- },
- "w": {
- "a": {
- "": "っとぁ"
- },
- "i": {
- "": "っとぃ"
- },
- "u": {
- "": "っとぅ"
- },
- "e": {
- "": "っとぇ"
- },
- "o": {
- "": "っとぉ"
- }
- }
- }
- },
- "n": {
- "a": {
- "": "な"
- },
- "i": {
- "": "に"
- },
- "u": {
- "": "ぬ"
- },
- "e": {
- "": "ね"
- },
- "o": {
- "": "の"
- },
- "y": {
- "a": {
- "": "にゃ"
- },
- "i": {
- "": "にぃ"
- },
- "u": {
- "": "にゅ"
- },
- "e": {
- "": "にぇ"
- },
- "o": {
- "": "にょ"
- }
- },
- "": "ん",
- "'": {
- "": "ん"
- }
- },
- "h": {
- "a": {
- "": "は"
- },
- "i": {
- "": "ひ"
- },
- "u": {
- "": "ふ"
- },
- "e": {
- "": "へ"
- },
- "o": {
- "": "ほ"
- },
- "y": {
- "a": {
- "": "ひゃ"
- },
- "i": {
- "": "ひぃ"
- },
- "u": {
- "": "ひゅ"
- },
- "e": {
- "": "ひぇ"
- },
- "o": {
- "": "ひょ"
- }
- },
- "h": {
- "a": {
- "": "っは"
- },
- "i": {
- "": "っひ"
- },
- "u": {
- "": "っふ"
- },
- "e": {
- "": "っへ"
- },
- "o": {
- "": "っほ"
- },
- "y": {
- "a": {
- "": "っひゃ"
- },
- "i": {
- "": "っひぃ"
- },
- "u": {
- "": "っひゅ"
- },
- "e": {
- "": "っひぇ"
- },
- "o": {
- "": "っひょ"
- }
- }
- }
- },
- "m": {
- "a": {
- "": "ま"
- },
- "i": {
- "": "み"
- },
- "u": {
- "": "む"
- },
- "e": {
- "": "め"
- },
- "o": {
- "": "も"
- },
- "y": {
- "a": {
- "": "みゃ"
- },
- "i": {
- "": "みぃ"
- },
- "u": {
- "": "みゅ"
- },
- "e": {
- "": "みぇ"
- },
- "o": {
- "": "みょ"
- }
- },
- "m": {
- "a": {
- "": "っま"
- },
- "i": {
- "": "っみ"
- },
- "u": {
- "": "っむ"
- },
- "e": {
- "": "っめ"
- },
- "o": {
- "": "っも"
- },
- "y": {
- "a": {
- "": "っみゃ"
- },
- "i": {
- "": "っみぃ"
- },
- "u": {
- "": "っみゅ"
- },
- "e": {
- "": "っみぇ"
- },
- "o": {
- "": "っみょ"
- }
- }
- }
- },
- "y": {
- "a": {
- "": "や"
- },
- "u": {
- "": "ゆ"
- },
- "o": {
- "": "よ"
- },
- "i": {
- "": "い"
- },
- "e": {
- "": "いぇ"
- },
- "y": {
- "a": {
- "": "っや"
- },
- "u": {
- "": "っゆ"
- },
- "o": {
- "": "っよ"
- },
- "i": {
- "": "っい"
- },
- "e": {
- "": "っいぇ"
- }
- }
- },
- "r": {
- "a": {
- "": "ら"
- },
- "i": {
- "": "り"
- },
- "u": {
- "": "る"
- },
- "e": {
- "": "れ"
- },
- "o": {
- "": "ろ"
- },
- "y": {
- "a": {
- "": "りゃ"
- },
- "i": {
- "": "りぃ"
- },
- "u": {
- "": "りゅ"
- },
- "e": {
- "": "りぇ"
- },
- "o": {
- "": "りょ"
- }
- },
- "r": {
- "a": {
- "": "っら"
- },
- "i": {
- "": "っり"
- },
- "u": {
- "": "っる"
- },
- "e": {
- "": "っれ"
- },
- "o": {
- "": "っろ"
- },
- "y": {
- "a": {
- "": "っりゃ"
- },
- "i": {
- "": "っりぃ"
- },
- "u": {
- "": "っりゅ"
- },
- "e": {
- "": "っりぇ"
- },
- "o": {
- "": "っりょ"
- }
- }
- }
- },
- "w": {
- "a": {
- "": "わ"
- },
- "i": {
- "": "うぃ"
- },
- "e": {
- "": "うぇ"
- },
- "o": {
- "": "を"
- },
- "h": {
- "a": {
- "": "うぁ"
- },
- "i": {
- "": "うぃ"
- },
- "u": {
- "": "う"
- },
- "e": {
- "": "うぇ"
- },
- "o": {
- "": "うぉ"
- }
- },
- "u": {
- "": "う"
- },
- "w": {
- "a": {
- "": "っわ"
- },
- "i": {
- "": "っうぃ"
- },
- "e": {
- "": "っうぇ"
- },
- "o": {
- "": "っを"
- },
- "h": {
- "a": {
- "": "っうぁ"
- },
- "i": {
- "": "っうぃ"
- },
- "u": {
- "": "っう"
- },
- "e": {
- "": "っうぇ"
- },
- "o": {
- "": "っうぉ"
- }
- },
- "u": {
- "": "っう"
- }
- }
- },
- "g": {
- "a": {
- "": "が"
- },
- "i": {
- "": "ぎ"
- },
- "u": {
- "": "ぐ"
- },
- "e": {
- "": "げ"
- },
- "o": {
- "": "ご"
- },
- "y": {
- "a": {
- "": "ぎゃ"
- },
- "i": {
- "": "ぎぃ"
- },
- "u": {
- "": "ぎゅ"
- },
- "e": {
- "": "ぎぇ"
- },
- "o": {
- "": "ぎょ"
- }
- },
- "w": {
- "a": {
- "": "ぐぁ"
- },
- "i": {
- "": "ぐぃ"
- },
- "u": {
- "": "ぐぅ"
- },
- "e": {
- "": "ぐぇ"
- },
- "o": {
- "": "ぐぉ"
- }
- },
- "g": {
- "a": {
- "": "っが"
- },
- "i": {
- "": "っぎ"
- },
- "u": {
- "": "っぐ"
- },
- "e": {
- "": "っげ"
- },
- "o": {
- "": "っご"
- },
- "y": {
- "a": {
- "": "っぎゃ"
- },
- "i": {
- "": "っぎぃ"
- },
- "u": {
- "": "っぎゅ"
- },
- "e": {
- "": "っぎぇ"
- },
- "o": {
- "": "っぎょ"
- }
- },
- "w": {
- "a": {
- "": "っぐぁ"
- },
- "i": {
- "": "っぐぃ"
- },
- "u": {
- "": "っぐぅ"
- },
- "e": {
- "": "っぐぇ"
- },
- "o": {
- "": "っぐぉ"
- }
- }
- }
- },
- "z": {
- "a": {
- "": "ざ"
- },
- "i": {
- "": "じ"
- },
- "u": {
- "": "ず"
- },
- "e": {
- "": "ぜ"
- },
- "o": {
- "": "ぞ"
- },
- "y": {
- "a": {
- "": "じゃ"
- },
- "i": {
- "": "じぃ"
- },
- "u": {
- "": "じゅ"
- },
- "e": {
- "": "じぇ"
- },
- "o": {
- "": "じょ"
- }
- },
- "z": {
- "a": {
- "": "っざ"
- },
- "i": {
- "": "っじ"
- },
- "u": {
- "": "っず"
- },
- "e": {
- "": "っぜ"
- },
- "o": {
- "": "っぞ"
- },
- "y": {
- "a": {
- "": "っじゃ"
- },
- "i": {
- "": "っじぃ"
- },
- "u": {
- "": "っじゅ"
- },
- "e": {
- "": "っじぇ"
- },
- "o": {
- "": "っじょ"
- }
- }
- }
- },
- "d": {
- "a": {
- "": "だ"
- },
- "i": {
- "": "ぢ"
- },
- "u": {
- "": "づ"
- },
- "e": {
- "": "で"
- },
- "o": {
- "": "ど"
- },
- "y": {
- "a": {
- "": "ぢゃ"
- },
- "i": {
- "": "ぢぃ"
- },
- "u": {
- "": "ぢゅ"
- },
- "e": {
- "": "ぢぇ"
- },
- "o": {
- "": "ぢょ"
- }
- },
- "h": {
- "a": {
- "": "でゃ"
- },
- "i": {
- "": "でぃ"
- },
- "u": {
- "": "でゅ"
- },
- "e": {
- "": "でぇ"
- },
- "o": {
- "": "でょ"
- }
- },
- "w": {
- "a": {
- "": "どぁ"
- },
- "i": {
- "": "どぃ"
- },
- "u": {
- "": "どぅ"
- },
- "e": {
- "": "どぇ"
- },
- "o": {
- "": "どぉ"
- }
- },
- "d": {
- "a": {
- "": "っだ"
- },
- "i": {
- "": "っぢ"
- },
- "u": {
- "": "っづ"
- },
- "e": {
- "": "っで"
- },
- "o": {
- "": "っど"
- },
- "y": {
- "a": {
- "": "っぢゃ"
- },
- "i": {
- "": "っぢぃ"
- },
- "u": {
- "": "っぢゅ"
- },
- "e": {
- "": "っぢぇ"
- },
- "o": {
- "": "っぢょ"
- }
- },
- "h": {
- "a": {
- "": "っでゃ"
- },
- "i": {
- "": "っでぃ"
- },
- "u": {
- "": "っでゅ"
- },
- "e": {
- "": "っでぇ"
- },
- "o": {
- "": "っでょ"
- }
- },
- "w": {
- "a": {
- "": "っどぁ"
- },
- "i": {
- "": "っどぃ"
- },
- "u": {
- "": "っどぅ"
- },
- "e": {
- "": "っどぇ"
- },
- "o": {
- "": "っどぉ"
- }
- }
- }
- },
- "b": {
- "a": {
- "": "ば"
- },
- "i": {
- "": "び"
- },
- "u": {
- "": "ぶ"
- },
- "e": {
- "": "べ"
- },
- "o": {
- "": "ぼ"
- },
- "y": {
- "a": {
- "": "びゃ"
- },
- "i": {
- "": "びぃ"
- },
- "u": {
- "": "びゅ"
- },
- "e": {
- "": "びぇ"
- },
- "o": {
- "": "びょ"
- }
- },
- "b": {
- "a": {
- "": "っば"
- },
- "i": {
- "": "っび"
- },
- "u": {
- "": "っぶ"
- },
- "e": {
- "": "っべ"
- },
- "o": {
- "": "っぼ"
- },
- "y": {
- "a": {
- "": "っびゃ"
- },
- "i": {
- "": "っびぃ"
- },
- "u": {
- "": "っびゅ"
- },
- "e": {
- "": "っびぇ"
- },
- "o": {
- "": "っびょ"
- }
- }
- }
- },
- "p": {
- "a": {
- "": "ぱ"
- },
- "i": {
- "": "ぴ"
- },
- "u": {
- "": "ぷ"
- },
- "e": {
- "": "ぺ"
- },
- "o": {
- "": "ぽ"
- },
- "y": {
- "a": {
- "": "ぴゃ"
- },
- "i": {
- "": "ぴぃ"
- },
- "u": {
- "": "ぴゅ"
- },
- "e": {
- "": "ぴぇ"
- },
- "o": {
- "": "ぴょ"
- }
- },
- "p": {
- "a": {
- "": "っぱ"
- },
- "i": {
- "": "っぴ"
- },
- "u": {
- "": "っぷ"
- },
- "e": {
- "": "っぺ"
- },
- "o": {
- "": "っぽ"
- },
- "y": {
- "a": {
- "": "っぴゃ"
- },
- "i": {
- "": "っぴぃ"
- },
- "u": {
- "": "っぴゅ"
- },
- "e": {
- "": "っぴぇ"
- },
- "o": {
- "": "っぴょ"
- }
- }
- }
- },
- "v": {
- "a": {
- "": "ゔぁ"
- },
- "i": {
- "": "ゔぃ"
- },
- "u": {
- "": "ゔ"
- },
- "e": {
- "": "ゔぇ"
- },
- "o": {
- "": "ゔぉ"
- },
- "y": {
- "a": {
- "": "ゔゃ"
- },
- "i": {
- "": "ゔぃ"
- },
- "u": {
- "": "ゔゅ"
- },
- "e": {
- "": "ゔぇ"
- },
- "o": {
- "": "ゔょ"
- }
- },
- "v": {
- "a": {
- "": "っゔぁ"
- },
- "i": {
- "": "っゔぃ"
- },
- "u": {
- "": "っゔ"
- },
- "e": {
- "": "っゔぇ"
- },
- "o": {
- "": "っゔぉ"
- },
- "y": {
- "a": {
- "": "っゔゃ"
- },
- "i": {
- "": "っゔぃ"
- },
- "u": {
- "": "っゔゅ"
- },
- "e": {
- "": "っゔぇ"
- },
- "o": {
- "": "っゔょ"
- }
- }
- }
- },
- "q": {
- "y": {
- "a": {
- "": "くゃ"
- },
- "i": {
- "": "くぃ"
- },
- "u": {
- "": "くゅ"
- },
- "e": {
- "": "くぇ"
- },
- "o": {
- "": "くょ"
- }
- },
- "w": {
- "a": {
- "": "くぁ"
- },
- "i": {
- "": "くぃ"
- },
- "u": {
- "": "くぅ"
- },
- "e": {
- "": "くぇ"
- },
- "o": {
- "": "くぉ"
- }
- },
- "a": {
- "": "くぁ"
- },
- "i": {
- "": "くぃ"
- },
- "u": {
- "": "くぅ"
- },
- "e": {
- "": "くぇ"
- },
- "o": {
- "": "くぉ"
- },
- "q": {
- "y": {
- "a": {
- "": "っくゃ"
- },
- "i": {
- "": "っくぃ"
- },
- "u": {
- "": "っくゅ"
- },
- "e": {
- "": "っくぇ"
- },
- "o": {
- "": "っくょ"
- }
- },
- "w": {
- "a": {
- "": "っくぁ"
- },
- "i": {
- "": "っくぃ"
- },
- "u": {
- "": "っくぅ"
- },
- "e": {
- "": "っくぇ"
- },
- "o": {
- "": "っくぉ"
- }
- },
- "a": {
- "": "っくぁ"
- },
- "i": {
- "": "っくぃ"
- },
- "u": {
- "": "っくぅ"
- },
- "e": {
- "": "っくぇ"
- },
- "o": {
- "": "っくぉ"
- }
- }
- },
- "f": {
- "y": {
- "a": {
- "": "ふゃ"
- },
- "i": {
- "": "ふぃ"
- },
- "u": {
- "": "ふゅ"
- },
- "e": {
- "": "ふぇ"
- },
- "o": {
- "": "ふょ"
- }
- },
- "w": {
- "a": {
- "": "ふぁ"
- },
- "i": {
- "": "ふぃ"
- },
- "u": {
- "": "ふぅ"
- },
- "e": {
- "": "ふぇ"
- },
- "o": {
- "": "ふぉ"
- }
- },
- "a": {
- "": "ふぁ"
- },
- "i": {
- "": "ふぃ"
- },
- "u": {
- "": "ふ"
- },
- "e": {
- "": "ふぇ"
- },
- "o": {
- "": "ふぉ"
- },
- "f": {
- "y": {
- "a": {
- "": "っふゃ"
- },
- "i": {
- "": "っふぃ"
- },
- "u": {
- "": "っふゅ"
- },
- "e": {
- "": "っふぇ"
- },
- "o": {
- "": "っふょ"
- }
- },
- "w": {
- "a": {
- "": "っふぁ"
- },
- "i": {
- "": "っふぃ"
- },
- "u": {
- "": "っふぅ"
- },
- "e": {
- "": "っふぇ"
- },
- "o": {
- "": "っふぉ"
- }
- },
- "a": {
- "": "っふぁ"
- },
- "i": {
- "": "っふぃ"
- },
- "u": {
- "": "っふ"
- },
- "e": {
- "": "っふぇ"
- },
- "o": {
- "": "っふぉ"
- }
- }
- },
- ".": {
- "": "。"
- },
- ",": {
- "": "、"
- },
- ":": {
- "": ":"
- },
- "/": {
- "": "・"
- },
- "!": {
- "": "!"
- },
- "?": {
- "": "?"
- },
- "~": {
- "": "〜"
- },
- "-": {
- "": "ー"
- },
- "‘": {
- "": "「"
- },
- "’": {
- "": "」"
- },
- "“": {
- "": "『"
- },
- "”": {
- "": "』"
- },
- "[": {
- "": "["
- },
- "]": {
- "": "]"
- },
- "(": {
- "": "("
- },
- ")": {
- "": ")"
- },
- "{": {
- "": "{"
- },
- "}": {
- "": "}"
- },
- "x": {
- "n": {
- "": "ん"
- },
- "t": {
- "u": {
- "": "っ"
- },
- "s": {
- "u": {
- "": "っ"
- }
- }
- },
- "w": {
- "a": {
- "": "ゎ"
- }
- },
- "k": {
- "a": {
- "": "ヵ"
- },
- "e": {
- "": "ヶ"
- }
- },
- "c": {
- "a": {
- "": "ヵ"
- },
- "e": {
- "": "ヶ"
- }
- },
- "a": {
- "": "ぁ"
- },
- "i": {
- "": "ぃ"
- },
- "u": {
- "": "ぅ"
- },
- "e": {
- "": "ぇ"
- },
- "o": {
- "": "ぉ"
- },
- "y": {
- "a": {
- "": "ゃ"
- },
- "i": {
- "": "ぃ"
- },
- "u": {
- "": "ゅ"
- },
- "e": {
- "": "ぇ"
- },
- "o": {
- "": "ょ"
- }
- }
- },
- "c": {
- "a": {
- "": "か"
- },
- "i": {
- "": "き"
- },
- "u": {
- "": "く"
- },
- "e": {
- "": "け"
- },
- "o": {
- "": "こ"
- },
- "y": {
- "a": {
- "": "ちゃ"
- },
- "i": {
- "": "ちぃ"
- },
- "u": {
- "": "ちゅ"
- },
- "e": {
- "": "ちぇ"
- },
- "o": {
- "": "ちょ"
- }
- },
- "h": {
- "a": {
- "": "ちゃ"
- },
- "i": {
- "": "ち"
- },
- "u": {
- "": "ちゅ"
- },
- "e": {
- "": "ちぇ"
- },
- "o": {
- "": "ちょ"
- },
- "y": {
- "a": {
- "": "ちゃ"
- },
- "i": {
- "": "ちぃ"
- },
- "u": {
- "": "ちゅ"
- },
- "e": {
- "": "ちぇ"
- },
- "o": {
- "": "ちょ"
- }
- }
- },
- "c": {
- "a": {
- "": "っか"
- },
- "i": {
- "": "っき"
- },
- "u": {
- "": "っく"
- },
- "e": {
- "": "っけ"
- },
- "o": {
- "": "っこ"
- },
- "y": {
- "a": {
- "": "っちゃ"
- },
- "i": {
- "": "っちぃ"
- },
- "u": {
- "": "っちゅ"
- },
- "e": {
- "": "っちぇ"
- },
- "o": {
- "": "っちょ"
- }
- },
- "h": {
- "a": {
- "": "っちゃ"
- },
- "i": {
- "": "っち"
- },
- "u": {
- "": "っちゅ"
- },
- "e": {
- "": "っちぇ"
- },
- "o": {
- "": "っちょ"
- },
- "y": {
- "a": {
- "": "っちゃ"
- },
- "i": {
- "": "っちぃ"
- },
- "u": {
- "": "っちゅ"
- },
- "e": {
- "": "っちぇ"
- },
- "o": {
- "": "っちょ"
- }
- }
- }
- }
- },
- "j": {
- "a": {
- "": "じゃ"
- },
- "i": {
- "": "じ"
- },
- "u": {
- "": "じゅ"
- },
- "e": {
- "": "じぇ"
- },
- "o": {
- "": "じょ"
- },
- "y": {
- "a": {
- "": "じゃ"
- },
- "i": {
- "": "じぃ"
- },
- "u": {
- "": "じゅ"
- },
- "e": {
- "": "じぇ"
- },
- "o": {
- "": "じょ"
- }
- },
- "j": {
- "a": {
- "": "っじゃ"
- },
- "i": {
- "": "っじ"
- },
- "u": {
- "": "っじゅ"
- },
- "e": {
- "": "っじぇ"
- },
- "o": {
- "": "っじょ"
- },
- "y": {
- "a": {
- "": "っじゃ"
- },
- "i": {
- "": "っじぃ"
- },
- "u": {
- "": "っじゅ"
- },
- "e": {
- "": "っじぇ"
- },
- "o": {
- "": "っじょ"
- }
- }
- }
- },
- "l": {
- "t": {
- "u": {
- "": "っ"
- },
- "s": {
- "u": {
- "": "っ"
- }
- }
- },
- "w": {
- "a": {
- "": "ゎ"
- }
- },
- "k": {
- "a": {
- "": "ヵ"
- },
- "e": {
- "": "ヶ"
- }
- },
- "c": {
- "a": {
- "": "ヵ"
- },
- "e": {
- "": "ヶ"
- }
- },
- "a": {
- "": "ぁ"
- },
- "i": {
- "": "ぃ"
- },
- "u": {
- "": "ぅ"
- },
- "e": {
- "": "ぇ"
- },
- "o": {
- "": "ぉ"
- },
- "y": {
- "a": {
- "": "ゃ"
- },
- "i": {
- "": "ぃ"
- },
- "u": {
- "": "ゅ"
- },
- "e": {
- "": "ぇ"
- },
- "o": {
- "": "ょ"
- }
- }
- }
- });
-
- get_transitions(&val);
-
- println!("{:#?}", get_transitions(&val));
- // println!("{:?}", serde_json::to_string_pretty(&get_transitions(&val)));
-}
-
-fn get_transitions(val: &Value) -> Vec<(char, Node)> {
- let mut transitions = vec![];
-
- if let Some(obj) = val.as_object() {
- for (k, v) in obj.iter() {
- if k == "" {
- continue;
- }
-
- let node = Node {
- transitions: get_transitions(&v),
- output: v.as_object().unwrap().get("").map(|out| out.as_str().unwrap().to_string()),
- };
- let char = k.chars().next().unwrap();
- transitions.push((char, node));
- }
- } else {
- panic!("waaaa");
- }
-
- transitions
-}
\ No newline at end of file
diff --git a/wana_kana_rust/upstream_conversions/src/bin/to_romaji_tree.rs b/wana_kana_rust/upstream_conversions/src/bin/to_romaji_tree.rs
deleted file mode 100644
index cb51f5d..0000000
--- a/wana_kana_rust/upstream_conversions/src/bin/to_romaji_tree.rs
+++ /dev/null
@@ -1,1163 +0,0 @@
-#![recursion_limit = "1024"]
-#![feature(slice_concat_ext)]
-
-#[macro_use]
-extern crate serde_json;
-use serde_json::value::Value;
-
-#[derive(Debug)]
-struct Node {
- pub transitions: Option>,
- // pub output: &'static str
- pub output: String,
-}
-
-fn main() {
- let val = json!({
- "あ": {
- "": "a"
- },
- "い": {
- "": "i"
- },
- "う": {
- "": "u"
- },
- "え": {
- "": "e"
- },
- "お": {
- "": "o"
- },
- "か": {
- "": "ka"
- },
- "き": {
- "": "ki",
- "ゃ": {
- "": "kya"
- },
- "ゅ": {
- "": "kyu"
- },
- "ょ": {
- "": "kyo"
- },
- "ぃ": {
- "": "kyi"
- },
- "ぇ": {
- "": "kye"
- }
- },
- "く": {
- "": "ku",
- "ゃ": {
- "": "kya"
- },
- "ゅ": {
- "": "kyu"
- },
- "ょ": {
- "": "kyo"
- },
- "ぃ": {
- "": "kyi"
- },
- "ぇ": {
- "": "kye"
- }
- },
- "け": {
- "": "ke"
- },
- "こ": {
- "": "ko"
- },
- "さ": {
- "": "sa"
- },
- "し": {
- "": "shi",
- "ゃ": {
- "": "sha"
- },
- "ゅ": {
- "": "shu"
- },
- "ょ": {
- "": "sho"
- },
- "ぃ": {
- "": "shyi"
- },
- "ぇ": {
- "": "she"
- }
- },
- "す": {
- "": "su"
- },
- "せ": {
- "": "se"
- },
- "そ": {
- "": "so"
- },
- "た": {
- "": "ta"
- },
- "ち": {
- "": "chi",
- "ゃ": {
- "": "cha"
- },
- "ゅ": {
- "": "chu"
- },
- "ょ": {
- "": "cho"
- },
- "ぃ": {
- "": "chyi"
- },
- "ぇ": {
- "": "che"
- }
- },
- "つ": {
- "": "tsu"
- },
- "て": {
- "": "te"
- },
- "と": {
- "": "to"
- },
- "な": {
- "": "na"
- },
- "に": {
- "": "ni",
- "ゃ": {
- "": "nya"
- },
- "ゅ": {
- "": "nyu"
- },
- "ょ": {
- "": "nyo"
- },
- "ぃ": {
- "": "nyi"
- },
- "ぇ": {
- "": "nye"
- }
- },
- "ぬ": {
- "": "nu"
- },
- "ね": {
- "": "ne"
- },
- "の": {
- "": "no"
- },
- "は": {
- "": "ha"
- },
- "ひ": {
- "": "hi",
- "ゃ": {
- "": "hya"
- },
- "ゅ": {
- "": "hyu"
- },
- "ょ": {
- "": "hyo"
- },
- "ぃ": {
- "": "hyi"
- },
- "ぇ": {
- "": "hye"
- }
- },
- "ふ": {
- "": "fu",
- "ゃ": {
- "": "fya"
- },
- "ゅ": {
- "": "fyu"
- },
- "ょ": {
- "": "fyo"
- },
- "ぃ": {
- "": "fyi"
- },
- "ぇ": {
- "": "fye"
- }
- },
- "へ": {
- "": "he"
- },
- "ほ": {
- "": "ho"
- },
- "ま": {
- "": "ma"
- },
- "み": {
- "": "mi",
- "ゃ": {
- "": "mya"
- },
- "ゅ": {
- "": "myu"
- },
- "ょ": {
- "": "myo"
- },
- "ぃ": {
- "": "myi"
- },
- "ぇ": {
- "": "mye"
- }
- },
- "む": {
- "": "mu"
- },
- "め": {
- "": "me"
- },
- "も": {
- "": "mo"
- },
- "ら": {
- "": "ra"
- },
- "り": {
- "": "ri",
- "ゃ": {
- "": "rya"
- },
- "ゅ": {
- "": "ryu"
- },
- "ょ": {
- "": "ryo"
- },
- "ぃ": {
- "": "ryi"
- },
- "ぇ": {
- "": "rye"
- }
- },
- "る": {
- "": "ru"
- },
- "れ": {
- "": "re"
- },
- "ろ": {
- "": "ro"
- },
- "や": {
- "": "ya"
- },
- "ゆ": {
- "": "yu"
- },
- "よ": {
- "": "yo"
- },
- "わ": {
- "": "wa"
- },
- "ゐ": {
- "": "wi"
- },
- "ゑ": {
- "": "we"
- },
- "を": {
- "": "wo"
- },
- "ん": {
- "": "n",
- "あ": {
- "": "n'a"
- },
- "い": {
- "": "n'i"
- },
- "う": {
- "": "n'u"
- },
- "え": {
- "": "n'e"
- },
- "お": {
- "": "n'o"
- },
- "や": {
- "": "n'ya"
- },
- "ゆ": {
- "": "n'yu"
- },
- "よ": {
- "": "n'yo"
- }
- },
- "が": {
- "": "ga"
- },
- "ぎ": {
- "": "gi",
- "ゃ": {
- "": "gya"
- },
- "ゅ": {
- "": "gyu"
- },
- "ょ": {
- "": "gyo"
- },
- "ぃ": {
- "": "gyi"
- },
- "ぇ": {
- "": "gye"
- }
- },
- "ぐ": {
- "": "gu"
- },
- "げ": {
- "": "ge"
- },
- "ご": {
- "": "go"
- },
- "ざ": {
- "": "za"
- },
- "じ": {
- "": "ji",
- "ゃ": {
- "": "ja"
- },
- "ゅ": {
- "": "ju"
- },
- "ょ": {
- "": "jo"
- },
- "ぃ": {
- "": "jyi"
- },
- "ぇ": {
- "": "je"
- }
- },
- "ず": {
- "": "zu"
- },
- "ぜ": {
- "": "ze"
- },
- "ぞ": {
- "": "zo"
- },
- "だ": {
- "": "da"
- },
- "ぢ": {
- "": "ji",
- "ゃ": {
- "": "ja"
- },
- "ゅ": {
- "": "ju"
- },
- "ょ": {
- "": "jo"
- },
- "ぃ": {
- "": "jyi"
- },
- "ぇ": {
- "": "je"
- }
- },
- "づ": {
- "": "zu"
- },
- "で": {
- "": "de"
- },
- "ど": {
- "": "do"
- },
- "ば": {
- "": "ba"
- },
- "び": {
- "": "bi",
- "ゃ": {
- "": "bya"
- },
- "ゅ": {
- "": "byu"
- },
- "ょ": {
- "": "byo"
- },
- "ぃ": {
- "": "byi"
- },
- "ぇ": {
- "": "bye"
- }
- },
- "ぶ": {
- "": "bu"
- },
- "べ": {
- "": "be"
- },
- "ぼ": {
- "": "bo"
- },
- "ぱ": {
- "": "pa"
- },
- "ぴ": {
- "": "pi",
- "ゃ": {
- "": "pya"
- },
- "ゅ": {
- "": "pyu"
- },
- "ょ": {
- "": "pyo"
- },
- "ぃ": {
- "": "pyi"
- },
- "ぇ": {
- "": "pye"
- }
- },
- "ぷ": {
- "": "pu"
- },
- "ぺ": {
- "": "pe"
- },
- "ぽ": {
- "": "po"
- },
- "ゔぁ": {
- "": "va"
- },
- "ゔぃ": {
- "": "vi"
- },
- "ゔ": {
- "": "vu",
- "ゃ": {
- "": "vya"
- },
- "ゅ": {
- "": "vyu"
- },
- "ょ": {
- "": "vyo"
- },
- "ぃ": {
- "": "vyi"
- },
- "ぇ": {
- "": "vye"
- }
- },
- "ゔぇ": {
- "": "ve"
- },
- "ゔぉ": {
- "": "vo"
- },
- "。": {
- "": "."
- },
- "、": {
- "": ","
- },
- ":": {
- "": ":"
- },
- "・": {
- "": "/"
- },
- "!": {
- "": "!"
- },
- "?": {
- "": "?"
- },
- "〜": {
- "": "~"
- },
- "ー": {
- "": "-"
- },
- "「": {
- "": "‘"
- },
- "」": {
- "": "’"
- },
- "『": {
- "": "“"
- },
- "』": {
- "": "”"
- },
- "[": {
- "": "["
- },
- "]": {
- "": "]"
- },
- "(": {
- "": "("
- },
- ")": {
- "": ")"
- },
- "{": {
- "": "{"
- },
- "}": {
- "": "}"
- },
- " ": {
- "": " "
- },
- "ゃ": {
- "": "ya"
- },
- "ゅ": {
- "": "yu"
- },
- "ょ": {
- "": "yo"
- },
- "ぁ": {
- "": "a"
- },
- "ぃ": {
- "": "i"
- },
- "ぅ": {
- "": "u"
- },
- "ぇ": {
- "": "e"
- },
- "ぉ": {
- "": "o"
- },
- "っ": {
- "あ": {
- "": "a"
- },
- "い": {
- "": "i"
- },
- "う": {
- "": "u"
- },
- "え": {
- "": "e"
- },
- "お": {
- "": "o"
- },
- "か": {
- "": "kka"
- },
- "き": {
- "": "kki",
- "ゃ": {
- "": "kkya"
- },
- "ゅ": {
- "": "kkyu"
- },
- "ょ": {
- "": "kkyo"
- },
- "ぃ": {
- "": "kkyi"
- },
- "ぇ": {
- "": "kkye"
- }
- },
- "く": {
- "": "kku",
- "ゃ": {
- "": "kkya"
- },
- "ゅ": {
- "": "kkyu"
- },
- "ょ": {
- "": "kkyo"
- },
- "ぃ": {
- "": "kkyi"
- },
- "ぇ": {
- "": "kkye"
- }
- },
- "け": {
- "": "kke"
- },
- "こ": {
- "": "kko"
- },
- "さ": {
- "": "ssa"
- },
- "し": {
- "": "sshi",
- "ゃ": {
- "": "ssha"
- },
- "ゅ": {
- "": "sshu"
- },
- "ょ": {
- "": "ssho"
- },
- "ぃ": {
- "": "sshyi"
- },
- "ぇ": {
- "": "sshe"
- }
- },
- "す": {
- "": "ssu"
- },
- "せ": {
- "": "sse"
- },
- "そ": {
- "": "sso"
- },
- "た": {
- "": "tta"
- },
- "ち": {
- "": "tchi",
- "ゃ": {
- "": "tcha"
- },
- "ゅ": {
- "": "tchu"
- },
- "ょ": {
- "": "tcho"
- },
- "ぃ": {
- "": "tchyi"
- },
- "ぇ": {
- "": "tche"
- }
- },
- "つ": {
- "": "ttsu"
- },
- "て": {
- "": "tte"
- },
- "と": {
- "": "tto"
- },
- "な": {
- "": "na"
- },
- "に": {
- "": "ni",
- "ゃ": {
- "": "nya"
- },
- "ゅ": {
- "": "nyu"
- },
- "ょ": {
- "": "nyo"
- },
- "ぃ": {
- "": "nyi"
- },
- "ぇ": {
- "": "nye"
- }
- },
- "ぬ": {
- "": "nu"
- },
- "ね": {
- "": "ne"
- },
- "の": {
- "": "no"
- },
- "は": {
- "": "hha"
- },
- "ひ": {
- "": "hhi",
- "ゃ": {
- "": "hhya"
- },
- "ゅ": {
- "": "hhyu"
- },
- "ょ": {
- "": "hhyo"
- },
- "ぃ": {
- "": "hhyi"
- },
- "ぇ": {
- "": "hhye"
- }
- },
- "ふ": {
- "": "ffu",
- "ゃ": {
- "": "ffya"
- },
- "ゅ": {
- "": "ffyu"
- },
- "ょ": {
- "": "ffyo"
- },
- "ぃ": {
- "": "ffyi"
- },
- "ぇ": {
- "": "ffye"
- }
- },
- "へ": {
- "": "hhe"
- },
- "ほ": {
- "": "hho"
- },
- "ま": {
- "": "mma"
- },
- "み": {
- "": "mmi",
- "ゃ": {
- "": "mmya"
- },
- "ゅ": {
- "": "mmyu"
- },
- "ょ": {
- "": "mmyo"
- },
- "ぃ": {
- "": "mmyi"
- },
- "ぇ": {
- "": "mmye"
- }
- },
- "む": {
- "": "mmu"
- },
- "め": {
- "": "mme"
- },
- "も": {
- "": "mmo"
- },
- "ら": {
- "": "rra"
- },
- "り": {
- "": "rri",
- "ゃ": {
- "": "rrya"
- },
- "ゅ": {
- "": "rryu"
- },
- "ょ": {
- "": "rryo"
- },
- "ぃ": {
- "": "rryi"
- },
- "ぇ": {
- "": "rrye"
- }
- },
- "る": {
- "": "rru"
- },
- "れ": {
- "": "rre"
- },
- "ろ": {
- "": "rro"
- },
- "や": {
- "": "ya"
- },
- "ゆ": {
- "": "yu"
- },
- "よ": {
- "": "yo"
- },
- "わ": {
- "": "wwa"
- },
- "ゐ": {
- "": "wwi"
- },
- "ゑ": {
- "": "wwe"
- },
- "を": {
- "": "wwo"
- },
- "ん": {
- "": "n"
- },
- "が": {
- "": "gga"
- },
- "ぎ": {
- "": "ggi",
- "ゃ": {
- "": "ggya"
- },
- "ゅ": {
- "": "ggyu"
- },
- "ょ": {
- "": "ggyo"
- },
- "ぃ": {
- "": "ggyi"
- },
- "ぇ": {
- "": "ggye"
- }
- },
- "ぐ": {
- "": "ggu"
- },
- "げ": {
- "": "gge"
- },
- "ご": {
- "": "ggo"
- },
- "ざ": {
- "": "zza"
- },
- "じ": {
- "": "jji",
- "ゃ": {
- "": "jja"
- },
- "ゅ": {
- "": "jju"
- },
- "ょ": {
- "": "jjo"
- },
- "ぃ": {
- "": "jjyi"
- },
- "ぇ": {
- "": "jje"
- }
- },
- "ず": {
- "": "zzu"
- },
- "ぜ": {
- "": "zze"
- },
- "ぞ": {
- "": "zzo"
- },
- "だ": {
- "": "dda"
- },
- "ぢ": {
- "": "jji",
- "ゃ": {
- "": "jja"
- },
- "ゅ": {
- "": "jju"
- },
- "ょ": {
- "": "jjo"
- },
- "ぃ": {
- "": "jjyi"
- },
- "ぇ": {
- "": "jje"
- }
- },
- "づ": {
- "": "zzu"
- },
- "で": {
- "": "dde"
- },
- "ど": {
- "": "ddo"
- },
- "ば": {
- "": "bba"
- },
- "び": {
- "": "bbi",
- "ゃ": {
- "": "bbya"
- },
- "ゅ": {
- "": "bbyu"
- },
- "ょ": {
- "": "bbyo"
- },
- "ぃ": {
- "": "bbyi"
- },
- "ぇ": {
- "": "bbye"
- }
- },
- "ぶ": {
- "": "bbu"
- },
- "べ": {
- "": "bbe"
- },
- "ぼ": {
- "": "bbo"
- },
- "ぱ": {
- "": "ppa"
- },
- "ぴ": {
- "": "ppi",
- "ゃ": {
- "": "ppya"
- },
- "ゅ": {
- "": "ppyu"
- },
- "ょ": {
- "": "ppyo"
- },
- "ぃ": {
- "": "ppyi"
- },
- "ぇ": {
- "": "ppye"
- }
- },
- "ぷ": {
- "": "ppu"
- },
- "ぺ": {
- "": "ppe"
- },
- "ぽ": {
- "": "ppo"
- },
- "ゔぁ": {
- "": "vva"
- },
- "ゔぃ": {
- "": "vvi"
- },
- "ゔ": {
- "": "vvu",
- "ゃ": {
- "": "vvya"
- },
- "ゅ": {
- "": "vvyu"
- },
- "ょ": {
- "": "vvyo"
- },
- "ぃ": {
- "": "vvyi"
- },
- "ぇ": {
- "": "vvye"
- }
- },
- "ゔぇ": {
- "": "vve"
- },
- "ゔぉ": {
- "": "vvo"
- },
- "。": {
- "": "."
- },
- "、": {
- "": ","
- },
- ":": {
- "": ":"
- },
- "・": {
- "": "/"
- },
- "!": {
- "": "!"
- },
- "?": {
- "": "?"
- },
- "〜": {
- "": "~"
- },
- "ー": {
- "": "-"
- },
- "「": {
- "": "‘"
- },
- "」": {
- "": "’"
- },
- "『": {
- "": "“"
- },
- "』": {
- "": "”"
- },
- "[": {
- "": "["
- },
- "]": {
- "": "]"
- },
- "(": {
- "": "("
- },
- ")": {
- "": ")"
- },
- "{": {
- "": "{"
- },
- "}": {
- "": "}"
- },
- " ": {
- "": " "
- },
- "ゃ": {
- "": "ya"
- },
- "ゅ": {
- "": "yu"
- },
- "ょ": {
- "": "yo"
- },
- "ぁ": {
- "": "a"
- },
- "ぃ": {
- "": "i"
- },
- "ぅ": {
- "": "u"
- },
- "ぇ": {
- "": "e"
- },
- "ぉ": {
- "": "o"
- },
- "": ""
- }
- });
-
- get_transitions(&val);
-
- println!("{:#?}", get_transitions(&val));
- // println!("{:?}", serde_json::to_string_pretty(&get_transitions(&val)));
-}
-
-fn get_transitions(val: &Value) -> Option> {
- let mut transitions = vec![];
-
- if let Some(obj) = val.as_object() {
- for (k, v) in obj.iter() {
- if k == "" {
- continue;
- }
-
- // if v.as_object().unwrap().get("").is_none(){
- // print!("{:?}", k,);
- // }
-
- // let node = Node{transitions: get_transitions(&v), output: v.as_object().unwrap().get("").map(|out|out.as_str().unwrap().to_string())};
- // let node = Node{transitions: get_transitions(&v), output: v.as_object().unwrap().get("").map(|out|out.as_str().unwrap().to_string())};
- let node = Node {
- transitions: get_transitions(&v),
- output: v.as_object().unwrap().get("").unwrap().as_str().unwrap().to_string(),
- };
- let char = k.chars().next().unwrap();
- transitions.push((char, node));
- }
- } else {
- panic!("waaaa");
- }
-
- if transitions.is_empty() {
- None
- } else {
- Some(transitions)
- }
-}
\ No newline at end of file
diff --git a/wana_kana_rust/wana_kana_wasm/.gitignore b/wana_kana_rust/wana_kana_wasm/.gitignore
deleted file mode 100644
index de3f45e..0000000
--- a/wana_kana_rust/wana_kana_wasm/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-
-/target/
-**/*.rs.bk
-Cargo.lock
-wasmbinding
\ No newline at end of file
diff --git a/wana_kana_rust/wana_kana_wasm/Cargo.toml b/wana_kana_rust/wana_kana_wasm/Cargo.toml
deleted file mode 100644
index 22ed9ac..0000000
--- a/wana_kana_rust/wana_kana_wasm/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-[package]
-name = "wana_kana_wasm"
-version = "0.1.0"
-authors = ["Pascal Seitz "]
-edition = "2018"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[lib]
-crate-type = ["cdylib"]
-
-[dependencies]
-wasm-bindgen = "0.2.55"
-wana_kana = { path = "../" }
\ No newline at end of file
diff --git a/wana_kana_rust/wana_kana_wasm/README.md b/wana_kana_rust/wana_kana_wasm/README.md
deleted file mode 100644
index 3ec0dac..0000000
--- a/wana_kana_rust/wana_kana_wasm/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-`cargo build --target wasm32-unknown-unknown --release --target-dir target`
-
-`wasm-bindgen target/wasm32-unknown-unknown/release/deps/wana_kana_wasm.wasm --nodejs --out-dir ./wasmbinding`
diff --git a/wana_kana_rust/wana_kana_wasm/index.js b/wana_kana_rust/wana_kana_wasm/index.js
deleted file mode 100644
index 0abdc67..0000000
--- a/wana_kana_rust/wana_kana_wasm/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const wana_kana_wasm = require('./wasmbinding/wana_kana_wasm.js');
-
-// // Call wasm method 'add' typical stack method
-// let result = wana_kana_wasm.add(10, 2);
-// console.log('add result:' + result);
-// // Call wasm method 'add' typical stack method
-// console.log('add result:' + wana_kana_wasm.to_kana("nice"));
-
-
-
-
-// import toKana from './src/toKana';
-// import toHiragana from './src/toHiragana';
-// import toKatakana from './src/toKatakana';
-// import toRomaji from './src/toRomaji';
-
-
-console.time("yo")
-for (var i = 0; i < 1000; i++) {
- wana_kana_wasm.to_kana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_kana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
- wana_kana_wasm.to_hiragana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_hiragana('アイウエオサシスセソナニヌネノカキクケコ')
- wana_kana_wasm.to_katakana('aiueosashisusesonaninunenokakikukeko')
- wana_kana_wasm.to_katakana('あいうえおさしすせそなにぬねのかきくけこ')
- wana_kana_wasm.to_romaji('あいうえおさしすせそなにぬねのかきくけこ')
- wana_kana_wasm.to_romaji('アイウエオサシスセソナニヌネノカキクケコ')
-}
-
-console.timeEnd("yo")
\ No newline at end of file
diff --git a/wana_kana_rust/wana_kana_wasm/src/lib.rs b/wana_kana_rust/wana_kana_wasm/src/lib.rs
deleted file mode 100644
index 55a1000..0000000
--- a/wana_kana_rust/wana_kana_wasm/src/lib.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-use wasm_bindgen::prelude::*;
-use wana_kana::to_romaji;
-use wana_kana::to_kana;
-use wana_kana::to_hiragana;
-use wana_kana::to_katakana;
-
-#[wasm_bindgen]
-pub fn add(a: u32, b: u32) -> u32 {
- a + b
-}
-
-#[wasm_bindgen]
-pub fn to_romaji(input: &str) -> String {
- to_romaji::to_romaji(input)
-}
-
-#[wasm_bindgen]
-pub fn to_kana(input: &str) -> String {
- to_kana::to_kana(input)
-}
-
-#[wasm_bindgen]
-pub fn to_hiragana(input: &str) -> String {
- to_hiragana::to_hiragana(input)
-}
-
-#[wasm_bindgen]
-pub fn to_katakana(input: &str) -> String {
- to_katakana::to_katakana(input)
-}
\ No newline at end of file