@drincs/pixi-vn-ink 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/functions/ChoiceInfoConverter.d.mts +5 -0
- package/dist/functions/ChoiceInfoConverter.d.ts +5 -0
- package/dist/functions/ChoiceInfoConverter.js +57 -0
- package/dist/functions/ChoiceInfoConverter.js.map +1 -0
- package/dist/functions/ChoiceInfoConverter.mjs +55 -0
- package/dist/functions/ChoiceInfoConverter.mjs.map +1 -0
- package/dist/functions/Importer.d.mts +3 -0
- package/dist/functions/Importer.d.ts +3 -0
- package/dist/functions/Importer.js +231 -0
- package/dist/functions/Importer.js.map +1 -0
- package/dist/functions/Importer.mjs +229 -0
- package/dist/functions/Importer.mjs.map +1 -0
- package/dist/functions/InkToPixivn.d.mts +5 -0
- package/dist/functions/InkToPixivn.d.ts +5 -0
- package/dist/functions/InkToPixivn.js +220 -0
- package/dist/functions/InkToPixivn.js.map +1 -0
- package/dist/functions/InkToPixivn.mjs +218 -0
- package/dist/functions/InkToPixivn.mjs.map +1 -0
- package/dist/functions/StoryInfoConverter.d.mts +6 -0
- package/dist/functions/StoryInfoConverter.d.ts +6 -0
- package/dist/functions/StoryInfoConverter.js +192 -0
- package/dist/functions/StoryInfoConverter.js.map +1 -0
- package/dist/functions/StoryInfoConverter.mjs +190 -0
- package/dist/functions/StoryInfoConverter.mjs.map +1 -0
- package/dist/functions/index.d.mts +3 -0
- package/dist/functions/index.d.ts +3 -0
- package/dist/functions/index.js +232 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/index.mjs +229 -0
- package/dist/functions/index.mjs.map +1 -0
- package/dist/types/InkRootType.d.mts +5 -0
- package/dist/types/InkRootType.d.ts +5 -0
- package/dist/types/InkRootType.js +4 -0
- package/dist/types/InkRootType.js.map +1 -0
- package/dist/types/InkRootType.mjs +3 -0
- package/dist/types/InkRootType.mjs.map +1 -0
- package/dist/types/InkStoryType.d.mts +9 -0
- package/dist/types/InkStoryType.d.ts +9 -0
- package/dist/types/InkStoryType.js +4 -0
- package/dist/types/InkStoryType.js.map +1 -0
- package/dist/types/InkStoryType.mjs +3 -0
- package/dist/types/InkStoryType.mjs.map +1 -0
- package/dist/types/LabelChoiceRes.d.mts +10 -0
- package/dist/types/LabelChoiceRes.d.ts +10 -0
- package/dist/types/LabelChoiceRes.js +4 -0
- package/dist/types/LabelChoiceRes.js.map +1 -0
- package/dist/types/LabelChoiceRes.mjs +3 -0
- package/dist/types/LabelChoiceRes.mjs.map +1 -0
- package/dist/types/parserItems/CallParserItemType.d.mts +5 -0
- package/dist/types/parserItems/CallParserItemType.d.ts +5 -0
- package/dist/types/parserItems/CallParserItemType.js +4 -0
- package/dist/types/parserItems/CallParserItemType.js.map +1 -0
- package/dist/types/parserItems/CallParserItemType.mjs +3 -0
- package/dist/types/parserItems/CallParserItemType.mjs.map +1 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.d.mts +8 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.d.ts +8 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.js +4 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.js.map +1 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.mjs +3 -0
- package/dist/types/parserItems/ChoiseInfoParserItemType.mjs.map +1 -0
- package/dist/types/parserItems/ChoiseParserItemType.d.mts +6 -0
- package/dist/types/parserItems/ChoiseParserItemType.d.ts +6 -0
- package/dist/types/parserItems/ChoiseParserItemType.js +4 -0
- package/dist/types/parserItems/ChoiseParserItemType.js.map +1 -0
- package/dist/types/parserItems/ChoiseParserItemType.mjs +3 -0
- package/dist/types/parserItems/ChoiseParserItemType.mjs.map +1 -0
- package/dist/types/parserItems/RootParserItemType.d.mts +5 -0
- package/dist/types/parserItems/RootParserItemType.d.ts +5 -0
- package/dist/types/parserItems/RootParserItemType.js +4 -0
- package/dist/types/parserItems/RootParserItemType.js.map +1 -0
- package/dist/types/parserItems/RootParserItemType.mjs +3 -0
- package/dist/types/parserItems/RootParserItemType.mjs.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# pixi-vn-ink
|
|
2
|
+
|
|
3
|
+
npm library to import .ink files into pixi-vn
|
|
4
|
+
|
|
5
|
+
## install project
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/DRincs-Productions/pixi-vn-ink
|
|
9
|
+
git submodule update --init --recursive
|
|
10
|
+
npm install
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Run tests
|
|
14
|
+
|
|
15
|
+
Press F5 in vscode to run tests
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/functions/ChoiceInfoConverter.ts
|
|
4
|
+
function getLabelChoice(items, result) {
|
|
5
|
+
let text = "";
|
|
6
|
+
let label = "";
|
|
7
|
+
let preDialog = "";
|
|
8
|
+
items.forEach((v, index) => {
|
|
9
|
+
if (typeof v === "string") {
|
|
10
|
+
if (v.startsWith("^")) {
|
|
11
|
+
text = v.substring(1);
|
|
12
|
+
}
|
|
13
|
+
} else if (v && typeof v === "object") {
|
|
14
|
+
if ("*" in v && typeof v["*"] && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
15
|
+
let l = "c" + v["*"].split("c")[1];
|
|
16
|
+
label = l;
|
|
17
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
18
|
+
let t = findChoiceText(v["s"]);
|
|
19
|
+
if (t) {
|
|
20
|
+
text = t;
|
|
21
|
+
preDialog = t;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (text && label) {
|
|
26
|
+
if (result[label]) {
|
|
27
|
+
result[label].text = text + result[label].text;
|
|
28
|
+
} else {
|
|
29
|
+
result[label] = { text };
|
|
30
|
+
}
|
|
31
|
+
if (preDialog) {
|
|
32
|
+
result[label].preDialog = { text: preDialog };
|
|
33
|
+
}
|
|
34
|
+
let newListItem = items.slice(index + 1);
|
|
35
|
+
getLabelChoice(newListItem, result);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function findChoiceText(items) {
|
|
41
|
+
for (const item of items) {
|
|
42
|
+
if (typeof item === "string") {
|
|
43
|
+
if (item.startsWith("^")) {
|
|
44
|
+
return item.substring(1);
|
|
45
|
+
}
|
|
46
|
+
} else if (item instanceof Array) {
|
|
47
|
+
let res = findChoiceText(item);
|
|
48
|
+
if (res) {
|
|
49
|
+
return res;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
exports.getLabelChoice = getLabelChoice;
|
|
56
|
+
//# sourceMappingURL=ChoiceInfoConverter.js.map
|
|
57
|
+
//# sourceMappingURL=ChoiceInfoConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/functions/ChoiceInfoConverter.ts"],"names":[],"mappings":";;;AAGO,SAAS,cAAA,CAAe,OAAc,MAAwB,EAAA;AACjE,EAAA,IAAI,IAAe,GAAA,EAAA,CAAA;AACnB,EAAA,IAAI,KAAgB,GAAA,EAAA,CAAA;AACpB,EAAA,IAAI,SAAoB,GAAA,EAAA,CAAA;AACxB,EAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAU,KAAA;AACxB,IAAI,IAAA,OAAO,MAAM,QAAU,EAAA;AAEvB,MAAI,IAAA,CAAA,CAAE,UAAW,CAAA,GAAG,CAAG,EAAA;AACnB,QAAO,IAAA,GAAA,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AAAA,OACxB;AAAA,KAEK,MAAA,IAAA,CAAA,IAAK,OAAO,CAAA,KAAM,QAAU,EAAA;AAEjC,MAAA,IAAI,OAAO,CAAK,IAAA,OAAO,CAAE,CAAA,GAAG,KAAK,OAAO,CAAA,CAAE,GAAG,CAAA,KAAM,YAAY,CAAE,CAAA,GAAG,CAAE,CAAA,QAAA,CAAS,GAAG,CAAG,EAAA;AACjF,QAAI,IAAA,CAAA,GAAI,MAAM,CAAE,CAAA,GAAG,EAAE,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA,CAAA;AACjC,QAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,iBAGH,GAAO,IAAA,CAAA,IAAK,CAAE,CAAA,GAAG,aAAa,KAAO,EAAA;AAC1C,QAAA,IAAI,CAAI,GAAA,cAAA,CAAe,CAAE,CAAA,GAAG,CAAC,CAAA,CAAA;AAC7B,QAAA,IAAI,CAAG,EAAA;AACH,UAAO,IAAA,GAAA,CAAA,CAAA;AACP,UAAY,SAAA,GAAA,CAAA,CAAA;AAAA,SAChB;AAAA,OACJ;AAAA,KACJ;AACA,IAAA,IAAI,QAAQ,KAAO,EAAA;AACf,MAAI,IAAA,MAAA,CAAO,KAAK,CAAG,EAAA;AACf,QAAA,MAAA,CAAO,KAAK,CAAE,CAAA,IAAA,GAAO,IAAO,GAAA,MAAA,CAAO,KAAK,CAAE,CAAA,IAAA,CAAA;AAAA,OAEzC,MAAA;AACD,QAAO,MAAA,CAAA,KAAK,CAAI,GAAA,EAAE,IAAW,EAAA,CAAA;AAAA,OACjC;AACA,MAAA,IAAI,SAAW,EAAA;AACX,QAAA,MAAA,CAAO,KAAK,CAAA,CAAE,SAAY,GAAA,EAAE,MAAM,SAAU,EAAA,CAAA;AAAA,OAChD;AAEA,MAAA,IAAI,WAAc,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACvC,MAAA,cAAA,CAAe,aAAa,MAAM,CAAA,CAAA;AAClC,MAAA,OAAA;AAAA,KACJ;AAAA,GACH,CAAA,CAAA;AACL,CAAA;AAEA,SAAS,eAAe,KAAiD,EAAA;AACrE,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACtB,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAI,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,CAAG,EAAA;AACtB,QAAO,OAAA,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA;AAAA,OAC3B;AAAA,KACJ,MAAA,IACS,gBAAgB,KAAO,EAAA;AAC5B,MAAI,IAAA,GAAA,GAAM,eAAe,IAAI,CAAA,CAAA;AAC7B,MAAA,IAAI,GAAK,EAAA;AACL,QAAO,OAAA,GAAA,CAAA;AAAA,OACX;AAAA,KACJ;AAAA,GACJ;AACJ","file":"ChoiceInfoConverter.js","sourcesContent":["import LabelChoiceRes from '../types/LabelChoiceRes';\r\nimport RootParserItemType from '../types/parserItems/RootParserItemType';\r\n\r\nexport function getLabelChoice(items: any[], result: LabelChoiceRes) {\r\n let text: string = \"\"\r\n let label: string = \"\"\r\n let preDialog: string = \"\"\r\n items.forEach((v, index) => {\r\n if (typeof v === \"string\") {\r\n // Dialog\r\n if (v.startsWith(\"^\")) {\r\n text = v.substring(1)\r\n }\r\n }\r\n else if (v && typeof v === \"object\") {\r\n // if is a choice\r\n if (\"*\" in v && typeof v[\"*\"] && typeof v[\"*\"] === \"string\" && v[\"*\"].includes(\"c\")) {\r\n let l = \"c\" + v[\"*\"].split(\"c\")[1]\r\n label = l\r\n }\r\n // if is choise info\r\n else if (\"s\" in v && v[\"s\"] instanceof Array) {\r\n let t = findChoiceText(v[\"s\"])\r\n if (t) {\r\n text = t\r\n preDialog = t\r\n }\r\n }\r\n }\r\n if (text && label) {\r\n if (result[label]) {\r\n result[label].text = text + result[label].text\r\n }\r\n else {\r\n result[label] = { text: text }\r\n }\r\n if (preDialog) {\r\n result[label].preDialog = { text: preDialog }\r\n }\r\n // split text and label\r\n let newListItem = items.slice(index + 1)\r\n getLabelChoice(newListItem, result)\r\n return\r\n }\r\n })\r\n}\r\n\r\nfunction findChoiceText(items: RootParserItemType[]): string | undefined {\r\n for (const item of items) {\r\n if (typeof item === \"string\") {\r\n if (item.startsWith(\"^\")) {\r\n return item.substring(1)\r\n }\r\n }\r\n else if (item instanceof Array) {\r\n let res = findChoiceText(item)\r\n if (res) {\r\n return res\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/functions/ChoiceInfoConverter.ts
|
|
2
|
+
function getLabelChoice(items, result) {
|
|
3
|
+
let text = "";
|
|
4
|
+
let label = "";
|
|
5
|
+
let preDialog = "";
|
|
6
|
+
items.forEach((v, index) => {
|
|
7
|
+
if (typeof v === "string") {
|
|
8
|
+
if (v.startsWith("^")) {
|
|
9
|
+
text = v.substring(1);
|
|
10
|
+
}
|
|
11
|
+
} else if (v && typeof v === "object") {
|
|
12
|
+
if ("*" in v && typeof v["*"] && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
13
|
+
let l = "c" + v["*"].split("c")[1];
|
|
14
|
+
label = l;
|
|
15
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
16
|
+
let t = findChoiceText(v["s"]);
|
|
17
|
+
if (t) {
|
|
18
|
+
text = t;
|
|
19
|
+
preDialog = t;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (text && label) {
|
|
24
|
+
if (result[label]) {
|
|
25
|
+
result[label].text = text + result[label].text;
|
|
26
|
+
} else {
|
|
27
|
+
result[label] = { text };
|
|
28
|
+
}
|
|
29
|
+
if (preDialog) {
|
|
30
|
+
result[label].preDialog = { text: preDialog };
|
|
31
|
+
}
|
|
32
|
+
let newListItem = items.slice(index + 1);
|
|
33
|
+
getLabelChoice(newListItem, result);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function findChoiceText(items) {
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
if (typeof item === "string") {
|
|
41
|
+
if (item.startsWith("^")) {
|
|
42
|
+
return item.substring(1);
|
|
43
|
+
}
|
|
44
|
+
} else if (item instanceof Array) {
|
|
45
|
+
let res = findChoiceText(item);
|
|
46
|
+
if (res) {
|
|
47
|
+
return res;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { getLabelChoice };
|
|
54
|
+
//# sourceMappingURL=ChoiceInfoConverter.mjs.map
|
|
55
|
+
//# sourceMappingURL=ChoiceInfoConverter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/functions/ChoiceInfoConverter.ts"],"names":[],"mappings":";AAGO,SAAS,cAAA,CAAe,OAAc,MAAwB,EAAA;AACjE,EAAA,IAAI,IAAe,GAAA,EAAA,CAAA;AACnB,EAAA,IAAI,KAAgB,GAAA,EAAA,CAAA;AACpB,EAAA,IAAI,SAAoB,GAAA,EAAA,CAAA;AACxB,EAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAU,KAAA;AACxB,IAAI,IAAA,OAAO,MAAM,QAAU,EAAA;AAEvB,MAAI,IAAA,CAAA,CAAE,UAAW,CAAA,GAAG,CAAG,EAAA;AACnB,QAAO,IAAA,GAAA,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AAAA,OACxB;AAAA,KAEK,MAAA,IAAA,CAAA,IAAK,OAAO,CAAA,KAAM,QAAU,EAAA;AAEjC,MAAA,IAAI,OAAO,CAAK,IAAA,OAAO,CAAE,CAAA,GAAG,KAAK,OAAO,CAAA,CAAE,GAAG,CAAA,KAAM,YAAY,CAAE,CAAA,GAAG,CAAE,CAAA,QAAA,CAAS,GAAG,CAAG,EAAA;AACjF,QAAI,IAAA,CAAA,GAAI,MAAM,CAAE,CAAA,GAAG,EAAE,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA,CAAA;AACjC,QAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,iBAGH,GAAO,IAAA,CAAA,IAAK,CAAE,CAAA,GAAG,aAAa,KAAO,EAAA;AAC1C,QAAA,IAAI,CAAI,GAAA,cAAA,CAAe,CAAE,CAAA,GAAG,CAAC,CAAA,CAAA;AAC7B,QAAA,IAAI,CAAG,EAAA;AACH,UAAO,IAAA,GAAA,CAAA,CAAA;AACP,UAAY,SAAA,GAAA,CAAA,CAAA;AAAA,SAChB;AAAA,OACJ;AAAA,KACJ;AACA,IAAA,IAAI,QAAQ,KAAO,EAAA;AACf,MAAI,IAAA,MAAA,CAAO,KAAK,CAAG,EAAA;AACf,QAAA,MAAA,CAAO,KAAK,CAAE,CAAA,IAAA,GAAO,IAAO,GAAA,MAAA,CAAO,KAAK,CAAE,CAAA,IAAA,CAAA;AAAA,OAEzC,MAAA;AACD,QAAO,MAAA,CAAA,KAAK,CAAI,GAAA,EAAE,IAAW,EAAA,CAAA;AAAA,OACjC;AACA,MAAA,IAAI,SAAW,EAAA;AACX,QAAA,MAAA,CAAO,KAAK,CAAA,CAAE,SAAY,GAAA,EAAE,MAAM,SAAU,EAAA,CAAA;AAAA,OAChD;AAEA,MAAA,IAAI,WAAc,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACvC,MAAA,cAAA,CAAe,aAAa,MAAM,CAAA,CAAA;AAClC,MAAA,OAAA;AAAA,KACJ;AAAA,GACH,CAAA,CAAA;AACL,CAAA;AAEA,SAAS,eAAe,KAAiD,EAAA;AACrE,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACtB,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAI,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,CAAG,EAAA;AACtB,QAAO,OAAA,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA;AAAA,OAC3B;AAAA,KACJ,MAAA,IACS,gBAAgB,KAAO,EAAA;AAC5B,MAAI,IAAA,GAAA,GAAM,eAAe,IAAI,CAAA,CAAA;AAC7B,MAAA,IAAI,GAAK,EAAA;AACL,QAAO,OAAA,GAAA,CAAA;AAAA,OACX;AAAA,KACJ;AAAA,GACJ;AACJ","file":"ChoiceInfoConverter.mjs","sourcesContent":["import LabelChoiceRes from '../types/LabelChoiceRes';\r\nimport RootParserItemType from '../types/parserItems/RootParserItemType';\r\n\r\nexport function getLabelChoice(items: any[], result: LabelChoiceRes) {\r\n let text: string = \"\"\r\n let label: string = \"\"\r\n let preDialog: string = \"\"\r\n items.forEach((v, index) => {\r\n if (typeof v === \"string\") {\r\n // Dialog\r\n if (v.startsWith(\"^\")) {\r\n text = v.substring(1)\r\n }\r\n }\r\n else if (v && typeof v === \"object\") {\r\n // if is a choice\r\n if (\"*\" in v && typeof v[\"*\"] && typeof v[\"*\"] === \"string\" && v[\"*\"].includes(\"c\")) {\r\n let l = \"c\" + v[\"*\"].split(\"c\")[1]\r\n label = l\r\n }\r\n // if is choise info\r\n else if (\"s\" in v && v[\"s\"] instanceof Array) {\r\n let t = findChoiceText(v[\"s\"])\r\n if (t) {\r\n text = t\r\n preDialog = t\r\n }\r\n }\r\n }\r\n if (text && label) {\r\n if (result[label]) {\r\n result[label].text = text + result[label].text\r\n }\r\n else {\r\n result[label] = { text: text }\r\n }\r\n if (preDialog) {\r\n result[label].preDialog = { text: preDialog }\r\n }\r\n // split text and label\r\n let newListItem = items.slice(index + 1)\r\n getLabelChoice(newListItem, result)\r\n return\r\n }\r\n })\r\n}\r\n\r\nfunction findChoiceText(items: RootParserItemType[]): string | undefined {\r\n for (const item of items) {\r\n if (typeof item === \"string\") {\r\n if (item.startsWith(\"^\")) {\r\n return item.substring(1)\r\n }\r\n }\r\n else if (item instanceof Array) {\r\n let res = findChoiceText(item)\r\n if (res) {\r\n return res\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var pixiVn = require('@drincs/pixi-vn');
|
|
4
|
+
var Compiler = require('inkjs/compiler/Compiler');
|
|
5
|
+
|
|
6
|
+
// src/functions/Importer.ts
|
|
7
|
+
|
|
8
|
+
// src/functions/ChoiceInfoConverter.ts
|
|
9
|
+
function getLabelChoice(items, result) {
|
|
10
|
+
let text = "";
|
|
11
|
+
let label = "";
|
|
12
|
+
let preDialog = "";
|
|
13
|
+
items.forEach((v, index) => {
|
|
14
|
+
if (typeof v === "string") {
|
|
15
|
+
if (v.startsWith("^")) {
|
|
16
|
+
text = v.substring(1);
|
|
17
|
+
}
|
|
18
|
+
} else if (v && typeof v === "object") {
|
|
19
|
+
if ("*" in v && typeof v["*"] && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
20
|
+
let l = "c" + v["*"].split("c")[1];
|
|
21
|
+
label = l;
|
|
22
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
23
|
+
let t = findChoiceText(v["s"]);
|
|
24
|
+
if (t) {
|
|
25
|
+
text = t;
|
|
26
|
+
preDialog = t;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (text && label) {
|
|
31
|
+
if (result[label]) {
|
|
32
|
+
result[label].text = text + result[label].text;
|
|
33
|
+
} else {
|
|
34
|
+
result[label] = { text };
|
|
35
|
+
}
|
|
36
|
+
if (preDialog) {
|
|
37
|
+
result[label].preDialog = { text: preDialog };
|
|
38
|
+
}
|
|
39
|
+
let newListItem = items.slice(index + 1);
|
|
40
|
+
getLabelChoice(newListItem, result);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function findChoiceText(items) {
|
|
46
|
+
for (const item of items) {
|
|
47
|
+
if (typeof item === "string") {
|
|
48
|
+
if (item.startsWith("^")) {
|
|
49
|
+
return item.substring(1);
|
|
50
|
+
}
|
|
51
|
+
} else if (item instanceof Array) {
|
|
52
|
+
let res = findChoiceText(item);
|
|
53
|
+
if (res) {
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/functions/StoryInfoConverter.ts
|
|
61
|
+
function getInkLabel(story) {
|
|
62
|
+
try {
|
|
63
|
+
let label = {};
|
|
64
|
+
findLabel(story, label);
|
|
65
|
+
return label;
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.error("[Pixi'VN Ink] Error parsing ink file", e);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function findLabel(story, labels) {
|
|
71
|
+
for (const storyItem of story) {
|
|
72
|
+
if (storyItem) {
|
|
73
|
+
if (storyItem instanceof Array) {
|
|
74
|
+
findLabel(storyItem, labels);
|
|
75
|
+
} else if (typeof storyItem === "object") {
|
|
76
|
+
addLabels(storyItem, labels);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function addLabels(storyItem, result, dadLabelKey = "", shareData = { preDialog: {} }) {
|
|
82
|
+
if (storyItem === null) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
for (const [key, value] of Object.entries(storyItem)) {
|
|
86
|
+
if (value instanceof Array) {
|
|
87
|
+
let labels = [];
|
|
88
|
+
let subLabels = {};
|
|
89
|
+
let labelName = (dadLabelKey ? dadLabelKey + "_" : "") + key;
|
|
90
|
+
getLabel(value, labelName, labels, subLabels, shareData);
|
|
91
|
+
for (const [subKey, subValue] of Object.entries(subLabels)) {
|
|
92
|
+
result[subKey] = subValue;
|
|
93
|
+
}
|
|
94
|
+
if (labels.length > 0) {
|
|
95
|
+
result[labelName] = labels;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function getLabel(items, labelKey, labelSteps, subLabels, shareData, isNewLine = true) {
|
|
101
|
+
var _a;
|
|
102
|
+
let isInEnv = false;
|
|
103
|
+
let envList = [];
|
|
104
|
+
if (shareData.preDialog[labelKey]) {
|
|
105
|
+
labelSteps.push({
|
|
106
|
+
dialog: shareData.preDialog[labelKey].text
|
|
107
|
+
});
|
|
108
|
+
delete shareData.preDialog[labelKey];
|
|
109
|
+
isNewLine = false;
|
|
110
|
+
}
|
|
111
|
+
items.forEach((v) => {
|
|
112
|
+
if (isInEnv) {
|
|
113
|
+
envList.push(v);
|
|
114
|
+
if (typeof v === "string" && v == "/ev") {
|
|
115
|
+
isInEnv = false;
|
|
116
|
+
}
|
|
117
|
+
} else if (typeof v === "string") {
|
|
118
|
+
if (v.startsWith("^")) {
|
|
119
|
+
if (!isNewLine && labelSteps.length > 0) {
|
|
120
|
+
labelSteps[labelSteps.length - 1].dialog = labelSteps[labelSteps.length - 1].dialog + v.substring(1);
|
|
121
|
+
} else {
|
|
122
|
+
labelSteps.push({
|
|
123
|
+
dialog: v.substring(1)
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
isNewLine = false;
|
|
127
|
+
} else if (v == "ev") {
|
|
128
|
+
isInEnv = true;
|
|
129
|
+
} else if (v == "\n") {
|
|
130
|
+
isNewLine = true;
|
|
131
|
+
} else if (v == "done") {
|
|
132
|
+
labelSteps.push({
|
|
133
|
+
end: "label_end"
|
|
134
|
+
});
|
|
135
|
+
isNewLine = false;
|
|
136
|
+
} else if (v == "end") {
|
|
137
|
+
labelSteps.push({
|
|
138
|
+
end: "game_end"
|
|
139
|
+
});
|
|
140
|
+
isNewLine = false;
|
|
141
|
+
}
|
|
142
|
+
} else if (v instanceof Array) {
|
|
143
|
+
getLabel(v, labelKey, labelSteps, subLabels, shareData, isNewLine);
|
|
144
|
+
} else if (v && typeof v === "object") {
|
|
145
|
+
if ("->" in v && typeof v["->"] === "string" && !v["->"].includes(".^.^.")) {
|
|
146
|
+
labelSteps.push({
|
|
147
|
+
labelToOpen: {
|
|
148
|
+
labelId: v["->"],
|
|
149
|
+
type: "call"
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
isNewLine = false;
|
|
153
|
+
} else if ("*" in v && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
154
|
+
envList.push(v);
|
|
155
|
+
isNewLine = false;
|
|
156
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
157
|
+
envList.push(v);
|
|
158
|
+
isNewLine = false;
|
|
159
|
+
} else {
|
|
160
|
+
addLabels(v, subLabels, labelKey, shareData);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
if (envList.length > 0) {
|
|
165
|
+
let choices = {};
|
|
166
|
+
getLabelChoice(envList, choices);
|
|
167
|
+
for (const [key, value] of Object.entries(choices)) {
|
|
168
|
+
let newKey = labelKey + "_" + key;
|
|
169
|
+
if (labelSteps.length > 0 && "currentChoiceMenuOptions" in labelSteps[labelSteps.length - 1]) {
|
|
170
|
+
(_a = labelSteps[labelSteps.length - 1].currentChoiceMenuOptions) == null ? void 0 : _a.push({
|
|
171
|
+
text: value.text,
|
|
172
|
+
label: newKey,
|
|
173
|
+
props: {},
|
|
174
|
+
type: "call"
|
|
175
|
+
});
|
|
176
|
+
} else {
|
|
177
|
+
labelSteps.push({
|
|
178
|
+
currentChoiceMenuOptions: [{
|
|
179
|
+
text: value.text,
|
|
180
|
+
label: newKey,
|
|
181
|
+
props: {},
|
|
182
|
+
type: "call"
|
|
183
|
+
}]
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (value.preDialog) {
|
|
187
|
+
shareData.preDialog[newKey] = {
|
|
188
|
+
text: value.preDialog.text
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// src/functions/InkToPixivn.ts
|
|
196
|
+
function convertInkText(text) {
|
|
197
|
+
let json = convertorInkToJson(text);
|
|
198
|
+
let obj;
|
|
199
|
+
try {
|
|
200
|
+
obj = JSON.parse(json);
|
|
201
|
+
} catch (e) {
|
|
202
|
+
console.error("[Pixi'VN Ink] Error parsing ink file", e);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
return getInkLabel(obj.root);
|
|
206
|
+
}
|
|
207
|
+
function convertorInkToJson(test) {
|
|
208
|
+
try {
|
|
209
|
+
const story = new Compiler.Compiler(test).Compile();
|
|
210
|
+
let json = story.ToJson();
|
|
211
|
+
console.log(json);
|
|
212
|
+
return json || "";
|
|
213
|
+
} catch (e) {
|
|
214
|
+
console.error("[Pixi'VN] Error compiling ink file", e);
|
|
215
|
+
return "";
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// src/functions/Importer.ts
|
|
220
|
+
function importInkText(text) {
|
|
221
|
+
let data = convertInkText(text);
|
|
222
|
+
if (data) {
|
|
223
|
+
{
|
|
224
|
+
pixiVn.importPixiVNJson(data);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
exports.importInkText = importInkText;
|
|
230
|
+
//# sourceMappingURL=Importer.js.map
|
|
231
|
+
//# sourceMappingURL=Importer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/functions/ChoiceInfoConverter.ts","../../src/functions/StoryInfoConverter.ts","../../src/functions/InkToPixivn.ts","../../src/functions/Importer.ts"],"names":["Compiler","importPixiVNJson"],"mappings":"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","file":"Importer.js","sourcesContent":["import LabelChoiceRes from '../types/LabelChoiceRes';\r\nimport RootParserItemType from '../types/parserItems/RootParserItemType';\r\n\r\nexport function getLabelChoice(items: any[], result: LabelChoiceRes) {\r\n let text: string = \"\"\r\n let label: string = \"\"\r\n let preDialog: string = \"\"\r\n items.forEach((v, index) => {\r\n if (typeof v === \"string\") {\r\n // Dialog\r\n if (v.startsWith(\"^\")) {\r\n text = v.substring(1)\r\n }\r\n }\r\n else if (v && typeof v === \"object\") {\r\n // if is a choice\r\n if (\"*\" in v && typeof v[\"*\"] && typeof v[\"*\"] === \"string\" && v[\"*\"].includes(\"c\")) {\r\n let l = \"c\" + v[\"*\"].split(\"c\")[1]\r\n label = l\r\n }\r\n // if is choise info\r\n else if (\"s\" in v && v[\"s\"] instanceof Array) {\r\n let t = findChoiceText(v[\"s\"])\r\n if (t) {\r\n text = t\r\n preDialog = t\r\n }\r\n }\r\n }\r\n if (text && label) {\r\n if (result[label]) {\r\n result[label].text = text + result[label].text\r\n }\r\n else {\r\n result[label] = { text: text }\r\n }\r\n if (preDialog) {\r\n result[label].preDialog = { text: preDialog }\r\n }\r\n // split text and label\r\n let newListItem = items.slice(index + 1)\r\n getLabelChoice(newListItem, result)\r\n return\r\n }\r\n })\r\n}\r\n\r\nfunction findChoiceText(items: RootParserItemType[]): string | undefined {\r\n for (const item of items) {\r\n if (typeof item === \"string\") {\r\n if (item.startsWith(\"^\")) {\r\n return item.substring(1)\r\n }\r\n }\r\n else if (item instanceof Array) {\r\n let res = findChoiceText(item)\r\n if (res) {\r\n return res\r\n }\r\n }\r\n }\r\n}\r\n","import { LabelJsonType, StepLabelJsonType } from '@drincs/pixi-vn';\r\nimport InkRootType from '../types/InkRootType';\r\nimport LabelChoiceRes from '../types/LabelChoiceRes';\r\nimport RootParserItemType from '../types/parserItems/RootParserItemType';\r\nimport { getLabelChoice } from './ChoiceInfoConverter';\r\n\r\nexport function getInkLabel(story: InkRootType[]): LabelJsonType | undefined {\r\n try {\r\n let label: LabelJsonType = {}\r\n\r\n findLabel(story, label)\r\n\r\n return label;\r\n } catch (e) {\r\n console.error(\"[Pixi'VN Ink] Error parsing ink file\", e)\r\n }\r\n}\r\n\r\nfunction findLabel(story: RootParserItemType[], labels: LabelJsonType) {\r\n for (const storyItem of story) {\r\n if (storyItem) {\r\n if (storyItem instanceof Array) {\r\n findLabel(storyItem, labels)\r\n }\r\n else if (typeof storyItem === \"object\") {\r\n addLabels(storyItem, labels)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction addLabels(storyItem: object, result: LabelJsonType, dadLabelKey: string = \"\", shareData: ShareData = { preDialog: {} }) {\r\n if (storyItem === null) {\r\n return\r\n }\r\n // for value and key in item\r\n for (const [key, value] of Object.entries(storyItem)) {\r\n // if value is an array\r\n if (value instanceof Array) {\r\n let labels: StepLabelJsonType[] = []\r\n let subLabels: LabelJsonType = {}\r\n let labelName = (dadLabelKey ? dadLabelKey + \"_\" : \"\") + key\r\n getLabel(value, labelName, labels, subLabels, shareData)\r\n for (const [subKey, subValue] of Object.entries(subLabels)) {\r\n result[subKey] = subValue\r\n }\r\n if (labels.length > 0) {\r\n result[labelName] = labels\r\n }\r\n }\r\n }\r\n}\r\n\r\ntype ShareData = {\r\n preDialog: { [label: string]: { text: string } }\r\n}\r\nfunction getLabel(items: any[], labelKey: string, labelSteps: StepLabelJsonType[], subLabels: LabelJsonType, shareData: ShareData, isNewLine: boolean = true) {\r\n let isInEnv = false\r\n let envList: any[] = []\r\n if (shareData.preDialog[labelKey]) {\r\n labelSteps.push({\r\n dialog: shareData.preDialog[labelKey].text\r\n })\r\n delete shareData.preDialog[labelKey]\r\n isNewLine = false\r\n }\r\n items.forEach((v) => {\r\n if (isInEnv) {\r\n envList.push(v)\r\n if (typeof v === \"string\" && v == \"/ev\") {\r\n isInEnv = false\r\n }\r\n }\r\n else if (typeof v === \"string\") {\r\n // Dialog\r\n if (v.startsWith(\"^\")) {\r\n if (!isNewLine && labelSteps.length > 0) {\r\n labelSteps[labelSteps.length - 1].dialog = labelSteps[labelSteps.length - 1].dialog + v.substring(1)\r\n } else {\r\n labelSteps.push({\r\n dialog: v.substring(1)\r\n })\r\n }\r\n isNewLine = false\r\n }\r\n else if (v == \"ev\") {\r\n isInEnv = true\r\n }\r\n else if (v == \"\\n\") {\r\n isNewLine = true\r\n }\r\n else if (v == \"done\") {\r\n labelSteps.push({\r\n end: \"label_end\"\r\n })\r\n isNewLine = false\r\n }\r\n else if (v == \"end\") {\r\n labelSteps.push({\r\n end: \"game_end\"\r\n })\r\n isNewLine = false\r\n }\r\n }\r\n else if (v instanceof Array) {\r\n getLabel(v, labelKey, labelSteps, subLabels, shareData, isNewLine)\r\n }\r\n else if (v && typeof v === \"object\") {\r\n if (\"->\" in v && typeof v[\"->\"] === \"string\" && !v[\"->\"].includes(\".^.^.\")) {\r\n labelSteps.push({\r\n labelToOpen: {\r\n labelId: v[\"->\"],\r\n type: \"call\",\r\n }\r\n })\r\n isNewLine = false\r\n }\r\n else if (\"*\" in v && typeof v[\"*\"] === \"string\" && v[\"*\"].includes(\"c\")) {\r\n envList.push(v)\r\n isNewLine = false\r\n }\r\n // if is choise info\r\n else if (\"s\" in v && v[\"s\"] instanceof Array) {\r\n envList.push(v)\r\n isNewLine = false\r\n }\r\n else {\r\n addLabels(v, subLabels, labelKey, shareData)\r\n }\r\n }\r\n })\r\n if (envList.length > 0) {\r\n let choices: LabelChoiceRes = {}\r\n getLabelChoice(envList, choices)\r\n for (const [key, value] of Object.entries(choices)) {\r\n let newKey = labelKey + \"_\" + key\r\n // if last step is choice\r\n if (labelSteps.length > 0 && \"currentChoiceMenuOptions\" in labelSteps[labelSteps.length - 1]) {\r\n labelSteps[labelSteps.length - 1].currentChoiceMenuOptions?.push({\r\n text: value.text,\r\n label: newKey,\r\n props: {},\r\n type: \"call\"\r\n })\r\n }\r\n else {\r\n labelSteps.push({\r\n currentChoiceMenuOptions: [{\r\n text: value.text,\r\n label: newKey,\r\n props: {},\r\n type: \"call\"\r\n }]\r\n })\r\n }\r\n if (value.preDialog) {\r\n shareData.preDialog[newKey] = {\r\n text: value.preDialog.text\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { LabelJsonType } from \"@drincs/pixi-vn\";\r\nimport { Compiler } from \"inkjs/compiler/Compiler\";\r\nimport InkStoryType from \"../types/InkStoryType\";\r\nimport { getInkLabel } from \"./StoryInfoConverter\";\r\n\r\nexport function convertInkText(text: string): LabelJsonType | undefined {\r\n let json = convertorInkToJson(text);\r\n let obj: InkStoryType\r\n try {\r\n obj = JSON.parse(json);\r\n } catch (e) {\r\n console.error(\"[Pixi'VN Ink] Error parsing ink file\", e)\r\n return\r\n }\r\n\r\n return getInkLabel(obj.root)\r\n}\r\n\r\nfunction convertorInkToJson(test: string): string {\r\n try {\r\n const story = new Compiler(test).Compile();\r\n let json = story.ToJson();\r\n console.log(json);\r\n return json || \"\";\r\n } catch (e) {\r\n console.error(\"[Pixi'VN] Error compiling ink file\", e)\r\n return \"\"\r\n }\r\n}\r\n","import { importPixiVNJson } from \"@drincs/pixi-vn\";\r\nimport { convertInkText } from \"./InkToPixivn\";\r\n\r\nexport function importInkText(text: string) {\r\n let data = convertInkText(text)\r\n if (data) {\r\n {\r\n importPixiVNJson(data)\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { importPixiVNJson } from '@drincs/pixi-vn';
|
|
2
|
+
import { Compiler } from 'inkjs/compiler/Compiler';
|
|
3
|
+
|
|
4
|
+
// src/functions/Importer.ts
|
|
5
|
+
|
|
6
|
+
// src/functions/ChoiceInfoConverter.ts
|
|
7
|
+
function getLabelChoice(items, result) {
|
|
8
|
+
let text = "";
|
|
9
|
+
let label = "";
|
|
10
|
+
let preDialog = "";
|
|
11
|
+
items.forEach((v, index) => {
|
|
12
|
+
if (typeof v === "string") {
|
|
13
|
+
if (v.startsWith("^")) {
|
|
14
|
+
text = v.substring(1);
|
|
15
|
+
}
|
|
16
|
+
} else if (v && typeof v === "object") {
|
|
17
|
+
if ("*" in v && typeof v["*"] && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
18
|
+
let l = "c" + v["*"].split("c")[1];
|
|
19
|
+
label = l;
|
|
20
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
21
|
+
let t = findChoiceText(v["s"]);
|
|
22
|
+
if (t) {
|
|
23
|
+
text = t;
|
|
24
|
+
preDialog = t;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (text && label) {
|
|
29
|
+
if (result[label]) {
|
|
30
|
+
result[label].text = text + result[label].text;
|
|
31
|
+
} else {
|
|
32
|
+
result[label] = { text };
|
|
33
|
+
}
|
|
34
|
+
if (preDialog) {
|
|
35
|
+
result[label].preDialog = { text: preDialog };
|
|
36
|
+
}
|
|
37
|
+
let newListItem = items.slice(index + 1);
|
|
38
|
+
getLabelChoice(newListItem, result);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function findChoiceText(items) {
|
|
44
|
+
for (const item of items) {
|
|
45
|
+
if (typeof item === "string") {
|
|
46
|
+
if (item.startsWith("^")) {
|
|
47
|
+
return item.substring(1);
|
|
48
|
+
}
|
|
49
|
+
} else if (item instanceof Array) {
|
|
50
|
+
let res = findChoiceText(item);
|
|
51
|
+
if (res) {
|
|
52
|
+
return res;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// src/functions/StoryInfoConverter.ts
|
|
59
|
+
function getInkLabel(story) {
|
|
60
|
+
try {
|
|
61
|
+
let label = {};
|
|
62
|
+
findLabel(story, label);
|
|
63
|
+
return label;
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.error("[Pixi'VN Ink] Error parsing ink file", e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function findLabel(story, labels) {
|
|
69
|
+
for (const storyItem of story) {
|
|
70
|
+
if (storyItem) {
|
|
71
|
+
if (storyItem instanceof Array) {
|
|
72
|
+
findLabel(storyItem, labels);
|
|
73
|
+
} else if (typeof storyItem === "object") {
|
|
74
|
+
addLabels(storyItem, labels);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function addLabels(storyItem, result, dadLabelKey = "", shareData = { preDialog: {} }) {
|
|
80
|
+
if (storyItem === null) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
for (const [key, value] of Object.entries(storyItem)) {
|
|
84
|
+
if (value instanceof Array) {
|
|
85
|
+
let labels = [];
|
|
86
|
+
let subLabels = {};
|
|
87
|
+
let labelName = (dadLabelKey ? dadLabelKey + "_" : "") + key;
|
|
88
|
+
getLabel(value, labelName, labels, subLabels, shareData);
|
|
89
|
+
for (const [subKey, subValue] of Object.entries(subLabels)) {
|
|
90
|
+
result[subKey] = subValue;
|
|
91
|
+
}
|
|
92
|
+
if (labels.length > 0) {
|
|
93
|
+
result[labelName] = labels;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function getLabel(items, labelKey, labelSteps, subLabels, shareData, isNewLine = true) {
|
|
99
|
+
var _a;
|
|
100
|
+
let isInEnv = false;
|
|
101
|
+
let envList = [];
|
|
102
|
+
if (shareData.preDialog[labelKey]) {
|
|
103
|
+
labelSteps.push({
|
|
104
|
+
dialog: shareData.preDialog[labelKey].text
|
|
105
|
+
});
|
|
106
|
+
delete shareData.preDialog[labelKey];
|
|
107
|
+
isNewLine = false;
|
|
108
|
+
}
|
|
109
|
+
items.forEach((v) => {
|
|
110
|
+
if (isInEnv) {
|
|
111
|
+
envList.push(v);
|
|
112
|
+
if (typeof v === "string" && v == "/ev") {
|
|
113
|
+
isInEnv = false;
|
|
114
|
+
}
|
|
115
|
+
} else if (typeof v === "string") {
|
|
116
|
+
if (v.startsWith("^")) {
|
|
117
|
+
if (!isNewLine && labelSteps.length > 0) {
|
|
118
|
+
labelSteps[labelSteps.length - 1].dialog = labelSteps[labelSteps.length - 1].dialog + v.substring(1);
|
|
119
|
+
} else {
|
|
120
|
+
labelSteps.push({
|
|
121
|
+
dialog: v.substring(1)
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
isNewLine = false;
|
|
125
|
+
} else if (v == "ev") {
|
|
126
|
+
isInEnv = true;
|
|
127
|
+
} else if (v == "\n") {
|
|
128
|
+
isNewLine = true;
|
|
129
|
+
} else if (v == "done") {
|
|
130
|
+
labelSteps.push({
|
|
131
|
+
end: "label_end"
|
|
132
|
+
});
|
|
133
|
+
isNewLine = false;
|
|
134
|
+
} else if (v == "end") {
|
|
135
|
+
labelSteps.push({
|
|
136
|
+
end: "game_end"
|
|
137
|
+
});
|
|
138
|
+
isNewLine = false;
|
|
139
|
+
}
|
|
140
|
+
} else if (v instanceof Array) {
|
|
141
|
+
getLabel(v, labelKey, labelSteps, subLabels, shareData, isNewLine);
|
|
142
|
+
} else if (v && typeof v === "object") {
|
|
143
|
+
if ("->" in v && typeof v["->"] === "string" && !v["->"].includes(".^.^.")) {
|
|
144
|
+
labelSteps.push({
|
|
145
|
+
labelToOpen: {
|
|
146
|
+
labelId: v["->"],
|
|
147
|
+
type: "call"
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
isNewLine = false;
|
|
151
|
+
} else if ("*" in v && typeof v["*"] === "string" && v["*"].includes("c")) {
|
|
152
|
+
envList.push(v);
|
|
153
|
+
isNewLine = false;
|
|
154
|
+
} else if ("s" in v && v["s"] instanceof Array) {
|
|
155
|
+
envList.push(v);
|
|
156
|
+
isNewLine = false;
|
|
157
|
+
} else {
|
|
158
|
+
addLabels(v, subLabels, labelKey, shareData);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
if (envList.length > 0) {
|
|
163
|
+
let choices = {};
|
|
164
|
+
getLabelChoice(envList, choices);
|
|
165
|
+
for (const [key, value] of Object.entries(choices)) {
|
|
166
|
+
let newKey = labelKey + "_" + key;
|
|
167
|
+
if (labelSteps.length > 0 && "currentChoiceMenuOptions" in labelSteps[labelSteps.length - 1]) {
|
|
168
|
+
(_a = labelSteps[labelSteps.length - 1].currentChoiceMenuOptions) == null ? void 0 : _a.push({
|
|
169
|
+
text: value.text,
|
|
170
|
+
label: newKey,
|
|
171
|
+
props: {},
|
|
172
|
+
type: "call"
|
|
173
|
+
});
|
|
174
|
+
} else {
|
|
175
|
+
labelSteps.push({
|
|
176
|
+
currentChoiceMenuOptions: [{
|
|
177
|
+
text: value.text,
|
|
178
|
+
label: newKey,
|
|
179
|
+
props: {},
|
|
180
|
+
type: "call"
|
|
181
|
+
}]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (value.preDialog) {
|
|
185
|
+
shareData.preDialog[newKey] = {
|
|
186
|
+
text: value.preDialog.text
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// src/functions/InkToPixivn.ts
|
|
194
|
+
function convertInkText(text) {
|
|
195
|
+
let json = convertorInkToJson(text);
|
|
196
|
+
let obj;
|
|
197
|
+
try {
|
|
198
|
+
obj = JSON.parse(json);
|
|
199
|
+
} catch (e) {
|
|
200
|
+
console.error("[Pixi'VN Ink] Error parsing ink file", e);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
return getInkLabel(obj.root);
|
|
204
|
+
}
|
|
205
|
+
function convertorInkToJson(test) {
|
|
206
|
+
try {
|
|
207
|
+
const story = new Compiler(test).Compile();
|
|
208
|
+
let json = story.ToJson();
|
|
209
|
+
console.log(json);
|
|
210
|
+
return json || "";
|
|
211
|
+
} catch (e) {
|
|
212
|
+
console.error("[Pixi'VN] Error compiling ink file", e);
|
|
213
|
+
return "";
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// src/functions/Importer.ts
|
|
218
|
+
function importInkText(text) {
|
|
219
|
+
let data = convertInkText(text);
|
|
220
|
+
if (data) {
|
|
221
|
+
{
|
|
222
|
+
importPixiVNJson(data);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export { importInkText };
|
|
228
|
+
//# sourceMappingURL=Importer.mjs.map
|
|
229
|
+
//# sourceMappingURL=Importer.mjs.map
|