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/9] =?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/9] =?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/9] =?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/9] 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
+
+ {
+ navigator.clipboard.writeText(targetText);
+ }}
+ />
+ }
+ label="ページ番号あり"
+ labelPlacement="start"
+ />
+
+
+
+ {showWarning && (
+
+ ファイル名を入力してください。
+
+ )}
+
+
+ {
+ setIsPageNumberOn(!isPageNumberOn);
+ }}
+ />
+ }
+ label="ページ番号あり"
+ labelPlacement="start"
+ />
+
-
- {
- navigator.clipboard.writeText(targetText);
- }}
- />
- }
- label="ページ番号あり"
- labelPlacement="start"
- />
-