From 7fcfbfdd24eb24f0dcc2b25b3ca8da2eb6f1077e Mon Sep 17 00:00:00 2001 From: ts5-25 <104970913+ts5-25@users.noreply.github.com> Date: Tue, 12 Sep 2023 12:17:57 +0900 Subject: [PATCH 1/5] =?UTF-8?q?4=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=BE?= =?UTF-8?q?=E3=81=A7=E5=87=BA=E5=8A=9B=E3=81=A7=E3=81=8D=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translate-backend/mapping.py | 2 + translate/src/modules/unicodeToBes.ts | 122 ++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/translate-backend/mapping.py b/translate-backend/mapping.py index 36c8b4a6..a6afd301 100644 --- a/translate-backend/mapping.py +++ b/translate-backend/mapping.py @@ -117,6 +117,8 @@ "?": "⠢", "「": "⠤", "」": "⠤", + "&": "⠰⠯", + "&": "⠰⠯", } mapping_alpha = { diff --git a/translate/src/modules/unicodeToBes.ts b/translate/src/modules/unicodeToBes.ts index 83c6f865..0c60ace8 100644 --- a/translate/src/modules/unicodeToBes.ts +++ b/translate/src/modules/unicodeToBes.ts @@ -6,6 +6,18 @@ export function unicodeToBes(unicode: string): Uint8Array { 0x2f, 0x30, 0x35, 0x2f, 0x31, 0x36, 0x20, 0x20, 0x45, 0x35, 0x33, 0x33, 0x32, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, ]; + const mapping_num = { + "1": "⠁", + "2": "⠃", + "3": "⠉", + "4": "⠙", + "5": "⠑", + "6": "⠋", + "7": "⠛", + "8": "⠓", + "9": "⠊", + "0": "⠚", + }; for (var i = 0; i < 512 - 32; i++) { output.push(0x20); } @@ -20,6 +32,7 @@ export function unicodeToBes(unicode: string): Uint8Array { var header = [0xff, 0x00, 0x00, 0xfd]; // 2つ目,3つ目はBESファイルの文字数を表す + /***ページ番号なし for (var i = 0; i < 4; i++) { output.push(header[i]); console.log(output.length); @@ -84,6 +97,115 @@ export function unicodeToBes(unicode: string): Uint8Array { var letters_num = 0x1a + all_letters; output[1025] = (letters_num % 255) + 12; output[1026] = Math.floor(letters_num / 255); + */ + + // ページ番号あり + for (var i = 0; i < 4; i++) { + output.push(header[i]); + } + var letters_on_page = 0; + for (var i = 0; i < 27; i++) { + output.push(0xa0); + letters_on_page += 1; + } + output.push(0xdc); + var num = "⠁"; + var num_codePoint = num.codePointAt(0); + if (num_codePoint != null) { + output.push(num_codePoint - 0x2800 + 0xa0); + } + letters_on_page += 2; + output.push(0xfe); + var letters = 0; + var lines = 0; + var pages = 0; + var separate_pos = 0; // 単語区切りの空白の位置 + var num_pos = 1025; // ページごとの文字数を入力する位置 + var letters_num = 0x1a; + + for (const char of unicode) { + const codePoint = char.codePointAt(0); + + if (lines === 21) { + // ページをまたぐとき + lines = 0; + pages += 1; + letters_num = 0x19 + letters_on_page; + output[num_pos] = (letters_num % 255) - Math.floor(letters_num / 255); + /*** + if (pages === 1) { + output[num_pos] = (letters_num % 255) + 13; + } else { + output[num_pos] = letters_num % 255; + } + */ + // 8B 01 <> 89 01 + output[num_pos + 1] = Math.floor(letters_num / 255); + console.log("Page: ", pages, num_pos, Math.floor(letters_num / 255)); + num_pos = output.length; + output.push(0x00); + // console.log(output.length); + output.push(0x00); + output.push(0xfd); + letters_on_page = 0; + for (var i = 0; i < 27; i++) { + output.push(0xa0); + letters_on_page += 1; + } + output.push(0xdc); + num = mapping_num[String(pages + 1)]; + num_codePoint = num.codePointAt(0); + if (num_codePoint != null) { + output.push(num_codePoint - 0x2800 + 0xa0); + } + letters_on_page += 2; + output.push(0xfe); + } + if (letters === 33) { + // 文が1行におさまらないとき改行 + if (codePoint === 0x2800) { + output.push(0xfe); + lines += 1; + letters = 0; + } else { + // 次の文字が空白でないとき、単語区切りに戻って改行 + output.splice(separate_pos, 0, 0xfe); + lines += 1; + letters = output.length - separate_pos - 1; + } + } + + if (codePoint === 0x2800) { + separate_pos = output.length; + } + if (codePoint != null) { + if (codePoint >= 0x2800 && codePoint <= 0x28ff) { + output.push(codePoint - 0x2800 + 0xa0); + letters += 1; + console.log(codePoint); + letters_on_page += 1; + } + } + if (char == "n") { + // "\n"で改行 + output.push(0x0d); + letters_on_page += 1; + output.push(0xfe); + lines += 1; + letters = 0; + } + } + output[31] = 0x30 + pages; + for (var i = 0; i + lines < 21; i++) { + output.push(0xfe); + } + output.push(0xff); + + letters_num = 0x19 + letters_on_page; + output[num_pos] = letters_num % 255; + output[num_pos + 1] = Math.floor(letters_num / 255); return new Uint8Array(output); } + +// 71 01 -> 77 01 From 5445b6d9001a602d8907c70d22d0c976e6369363 Mon Sep 17 00:00:00 2001 From: ts5-25 <104970913+ts5-25@users.noreply.github.com> Date: Tue, 19 Sep 2023 18:22:51 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=87=E7=AB=A0=E3=81=AE=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E8=B7=A8=E3=81=8E=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translate/src/modules/unicodeToBes.ts | 37 ++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/translate/src/modules/unicodeToBes.ts b/translate/src/modules/unicodeToBes.ts index 0c60ace8..33e67135 100644 --- a/translate/src/modules/unicodeToBes.ts +++ b/translate/src/modules/unicodeToBes.ts @@ -143,6 +143,7 @@ export function unicodeToBes(unicode: string): Uint8Array { output[num_pos + 1] = Math.floor(letters_num / 255); console.log("Page: ", pages, num_pos, Math.floor(letters_num / 255)); num_pos = output.length; + console.log("sep", num_pos); output.push(0x00); // console.log(output.length); output.push(0x00); @@ -173,6 +174,34 @@ export function unicodeToBes(unicode: string): Uint8Array { lines += 1; letters = output.length - separate_pos - 1; } + if (lines === 21) { + // ページをまたぐとき + lines = 0; + pages += 1; + letters_on_page = letters_on_page - letters; + letters_num = 0x19 + letters_on_page; + output[num_pos] = (letters_num % 255) - Math.floor(letters_num / 255); + output[num_pos + 1] = Math.floor(letters_num / 255); + console.log("Page: ", pages, num_pos, Math.floor(letters_num / 255)); + num_pos = separate_pos + 1; + console.log("con", num_pos); + output.splice(separate_pos + 1, 0, 0x00); + output.splice(separate_pos + 2, 0, 0x00); + output.splice(separate_pos + 3, 0, 0xfd); + letters_on_page = letters; + for (var i = 0; i < 27; i++) { + output.splice(separate_pos + i + 4, 0, 0xa0); + letters_on_page += 1; + } + output.splice(separate_pos + 31, 0, 0xdc); + num = mapping_num[String(pages + 1)]; + num_codePoint = num.codePointAt(0); + if (num_codePoint != null) { + output.splice(separate_pos + 32, 0, num_codePoint - 0x2800 + 0xa0); + } + letters_on_page += 2; + output.splice(separate_pos + 33, 0, 0xfe); + } } if (codePoint === 0x2800) { @@ -182,7 +211,6 @@ export function unicodeToBes(unicode: string): Uint8Array { if (codePoint >= 0x2800 && codePoint <= 0x28ff) { output.push(codePoint - 0x2800 + 0xa0); letters += 1; - console.log(codePoint); letters_on_page += 1; } } @@ -202,6 +230,13 @@ export function unicodeToBes(unicode: string): Uint8Array { output.push(0xff); letters_num = 0x19 + letters_on_page; + console.log( + "Page: ", + pages, + num_pos, + letters_num % 255, + Math.floor(letters_num / 255), + ); output[num_pos] = letters_num % 255; output[num_pos + 1] = Math.floor(letters_num / 255); From 2017d2ea4654580471b87f85e5fc8a740c6377dd Mon Sep 17 00:00:00 2001 From: ts5-25 <104970913+ts5-25@users.noreply.github.com> Date: Tue, 19 Sep 2023 19:22:01 +0900 Subject: [PATCH 3/5] =?UTF-8?q?10=E3=83=9A=E3=83=BC=E3=82=B8=E4=BB=A5?= =?UTF-8?q?=E4=B8=8A=E3=82=82=E3=83=9A=E3=83=BC=E3=82=B8=E7=95=AA=E5=8F=B7?= =?UTF-8?q?=E4=BB=98=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translate/src/modules/unicodeToBes.ts | 54 +++++++++++++++++---------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/translate/src/modules/unicodeToBes.ts b/translate/src/modules/unicodeToBes.ts index 33e67135..e4cbc526 100644 --- a/translate/src/modules/unicodeToBes.ts +++ b/translate/src/modules/unicodeToBes.ts @@ -154,12 +154,17 @@ export function unicodeToBes(unicode: string): Uint8Array { letters_on_page += 1; } output.push(0xdc); - num = mapping_num[String(pages + 1)]; - num_codePoint = num.codePointAt(0); - if (num_codePoint != null) { - output.push(num_codePoint - 0x2800 + 0xa0); + letters_on_page += 1; + const num_str = String(pages + 1); + for (var i = 0; i < num_str.length; i++) { + num = mapping_num[num_str[i]]; + console.log(i, num_str, num); + num_codePoint = num.codePointAt(0); + if (num_codePoint != null) { + output.push(num_codePoint - 0x2800 + 0xa0); + } + letters_on_page += 1; } - letters_on_page += 2; output.push(0xfe); } if (letters === 33) { @@ -178,6 +183,7 @@ export function unicodeToBes(unicode: string): Uint8Array { // ページをまたぐとき lines = 0; pages += 1; + // 次ページに移った文字数を引く letters_on_page = letters_on_page - letters; letters_num = 0x19 + letters_on_page; output[num_pos] = (letters_num % 255) - Math.floor(letters_num / 255); @@ -194,13 +200,21 @@ export function unicodeToBes(unicode: string): Uint8Array { letters_on_page += 1; } output.splice(separate_pos + 31, 0, 0xdc); - num = mapping_num[String(pages + 1)]; - num_codePoint = num.codePointAt(0); - if (num_codePoint != null) { - output.splice(separate_pos + 32, 0, num_codePoint - 0x2800 + 0xa0); + letters_on_page += 1; + const num_str = String(pages + 1); + for (var i = 0; i < num_str.length; i++) { + num = mapping_num[num_str[i]]; + num_codePoint = num.codePointAt(0); + if (num_codePoint != null) { + output.splice( + separate_pos + 32 + i, + 0, + num_codePoint - 0x2800 + 0xa0, + ); + } + letters_on_page += 1; } - letters_on_page += 2; - output.splice(separate_pos + 33, 0, 0xfe); + output.splice(separate_pos + 32 + num_str.length, 0, 0xfe); } } @@ -214,7 +228,7 @@ export function unicodeToBes(unicode: string): Uint8Array { letters_on_page += 1; } } - if (char == "n") { + if (char === "n") { // "\n"で改行 output.push(0x0d); letters_on_page += 1; @@ -223,20 +237,20 @@ export function unicodeToBes(unicode: string): Uint8Array { letters = 0; } } - output[31] = 0x30 + pages; + + if (pages < 10) { + output[31] = 0x30 + pages; + } else { + output[31] = 0x30 + Math.floor(pages / 10); + output[32] = 0x30 + (pages % 10); + } + for (var i = 0; i + lines < 21; i++) { output.push(0xfe); } output.push(0xff); letters_num = 0x19 + letters_on_page; - console.log( - "Page: ", - pages, - num_pos, - letters_num % 255, - Math.floor(letters_num / 255), - ); output[num_pos] = letters_num % 255; output[num_pos + 1] = Math.floor(letters_num / 255); From e31c0205baffea62103a3b2c0311bee627a70bac Mon Sep 17 00:00:00 2001 From: ts5-25 <104970913+ts5-25@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:32:46 +0900 Subject: [PATCH 4/5] cached --- translate/src/App.tsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/translate/src/App.tsx b/translate/src/App.tsx index dd28e864..a94644ee 100644 --- a/translate/src/App.tsx +++ b/translate/src/App.tsx @@ -14,6 +14,8 @@ import { IconButton, Typography, TextField, + FormControlLabel, + Switch, } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import { useTheme } from "@mui/material/styles"; @@ -167,6 +169,19 @@ function App() { Copy +