diff --git a/package.json b/package.json index f72a5569e..43a708e02 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,9 @@ "vuepress-theme-hope": "2.0.0-beta.235" }, "dependencies": { + "@vuepress/plugin-shiki": "2.0.0-beta.66", "axios": "^1.6.5", - "fs-extra": "^11.2.0" + "fs-extra": "^11.2.0", + "vuepress-plugin-md-enhance": "2.0.0-beta.66" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53fb3f8f0..a6e709ff6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,18 @@ importers: .: dependencies: + '@vuepress/plugin-shiki': + specifier: 2.0.0-beta.66 + version: 2.0.0-beta.66 axios: specifier: ^1.6.5 version: 1.7.9 fs-extra: specifier: ^11.2.0 version: 11.3.0 + vuepress-plugin-md-enhance: + specifier: 2.0.0-beta.66 + version: 2.0.0-beta.66 devDependencies: '@vuepress/client': specifier: 2.0.0-beta.66 @@ -794,6 +800,10 @@ packages: resolution: {integrity: sha512-X414T54zh0i+n5MbPL0kzGwRzcCU0hlpe4wp74cr44RWrsvJ8+78ioOx7WJOM8rgGHRWIoEEp6BjB1WfI734Iw==} engines: {node: '>= 14'} + '@mr-hope/vuepress-shared@2.0.0-beta.66': + resolution: {integrity: sha512-NUKA+6ARjFqVw+QhhPGZOXr7Kw8bH+1pzk7pmGQBMLIFhkTRPJQxKX9j1BMtq1hHlo2fBmHINYUpUgDzbvhYnQ==} + deprecated: use vuepress-shared instead + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -970,6 +980,9 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/gensync@1.0.4': resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} @@ -982,6 +995,9 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/katex@0.14.0': + resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} + '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} @@ -1012,6 +1028,9 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mermaid@8.2.9': + resolution: {integrity: sha512-f1i8fNoVFVJXedk+R7GcEk4KoOWzWAU3CzFqlVw1qWKktfsataBERezCz1pOdKy8Ec02ZdPQXGM7NU2lPHABYQ==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -1036,6 +1055,9 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/web-bluetooth@0.0.14': + resolution: {integrity: sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==} + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -1088,12 +1110,21 @@ packages: resolution: {integrity: sha512-VWOAxjePlxeao/6ecg1AQrrnbtgDJ0VOyYX3Zx2r2vwD0lBDE8OCtJUjP2X+3g2H8bauY4utM7rqWqm7yHC1og==} hasBin: true + '@vuepress/client@2.0.0-beta.45': + resolution: {integrity: sha512-4oK77LI5FpHvF6bZxREfLdWfOgAZroDkyy46moRopasg72UeXjfvOTb/6tIKaNQP6e/Kn2ubRxVeLe7DR5d9Ng==} + '@vuepress/client@2.0.0-beta.66': resolution: {integrity: sha512-WjrL1u0NOVUwiGoVOIfQqSU7SwzJUkyBFu3xiZoNmWFD9VdPIfuSRvVeZDhr+br/0tA7XrJd2ueSEDt5+BM3Qg==} + '@vuepress/core@2.0.0-beta.45': + resolution: {integrity: sha512-SeTzsNKc+E41b0p5nNiWRqMIxXM0Pu59MAaSkd1SFqEa8vtxDQZvgdM2xIbmCEejVSnKqLJwyyN+F2vEvPF9WA==} + '@vuepress/core@2.0.0-beta.66': resolution: {integrity: sha512-CPvm6BR5zpvKeky9Z9QbAzsDHTrrxEXFKvN5MUsdEKUTPfoumI1dDT2O6eQS37X9jNB+6mckFaPWKQncbaW1Bg==} + '@vuepress/markdown@2.0.0-beta.45': + resolution: {integrity: sha512-wm9NsJ17G5Cw7idj+ChZVrdKkcTkx+1DwAZDgJcQESdvDTmggQYonZa8vSY1rLxw50VmHU2v8WsiaYTTn91slA==} + '@vuepress/markdown@2.0.0-beta.66': resolution: {integrity: sha512-Zj4THYy6qsw3S9ROoNRy+o4i/4WyYhXKsDEM1v0N0/WJ0DMeHZORDlBPnq7dKwEqtyv42iLz9D2SYI7T3ADs/A==} @@ -1103,12 +1134,18 @@ packages: '@vuepress/plugin-back-to-top@2.0.0-beta.66': resolution: {integrity: sha512-tmBe7h3uosQcAko1dmqUYjMUdIBxSE7nMbKAsHb8/GX77HWLOM5SaOKye++vPWu/1HMkZwU/iwI2njdC6fSTYw==} + '@vuepress/plugin-container@2.0.0-beta.45': + resolution: {integrity: sha512-TZfNDQDFKpdl3cBAMZ9jQM4nbPBYNPxk7RZJ7qfjSz1vjM8gbDnsA2G7Mfxh4PceaDAWDsqzUnBpgB+5ws01Dg==} + '@vuepress/plugin-container@2.0.0-beta.66': resolution: {integrity: sha512-/R8NlDz18co9qXoYjarJA+kIFWFNrhE1+Xd1WSgcUZw5WoQydz19MTPDJICmiHQBGZjm2EgnWbyNZFpk6BcsPQ==} '@vuepress/plugin-external-link-icon@2.0.0-beta.66': resolution: {integrity: sha512-kkOMhtJSVkjN4ncaEKxoZ9pzlIrQvEYh2W66H1Mgb4TdnN4P+IDvIbTaMLlD5SaUnS/yF7YiLLtsMtKH0z0oyA==} + '@vuepress/plugin-git@2.0.0-beta.45': + resolution: {integrity: sha512-n5f/5l/a4eE802OzBLjN0d8zB2dL1oexBHd/huvTf/gP5P2MHaEQov8757VU12rNYtmbO2ch9BPGMfYwPH9Zvg==} + '@vuepress/plugin-git@2.0.0-beta.66': resolution: {integrity: sha512-IOCoOIPwbAmxXr6clf9BRyv0lsgR1G9CAkzM7PkrBSeW7QSxh9skfSsNFNSe1vhjNyQGETq+Ebjfje8Y8p0qjA==} @@ -1127,9 +1164,18 @@ packages: '@vuepress/plugin-search@2.0.0-beta.66': resolution: {integrity: sha512-OeAaTOBnBwIH1xyleyHGOVjgJNdGvbCPocNbnJOAjTaV6K5FeNgBlX338Kqw0adu2E4DK90UapYDmiXZH/BLAg==} + '@vuepress/plugin-shiki@2.0.0-beta.66': + resolution: {integrity: sha512-s1x5adVEP3iHhTaTlW3icw3/4Kge/3pqE9T27J2ZEkzSjwI38Cj/MVBxKayBes3gJuOE0snADTkhclSN0WEwgQ==} + + '@vuepress/plugin-theme-data@2.0.0-beta.45': + resolution: {integrity: sha512-7mjA5ZiAOKAspijdslnc0QcfCz35muPS+yVMsXOZ42TwaVrNmJ96W+WnCL6tiEIVH6JrQKHiDq4nPZpkQGN7iw==} + '@vuepress/plugin-theme-data@2.0.0-beta.66': resolution: {integrity: sha512-EzDXhpG47Sc796fg1q7m3XXjD2qD+bpozRcM1aoyYP1fe/o25/q/5l8ARz9vpONuI8JvDVYmaYT3rUAh5oKstw==} + '@vuepress/shared@2.0.0-beta.45': + resolution: {integrity: sha512-lYj+rgMtQ6liWjvzVy7jGux/Eix5ExbUy8b2uFAAsSE4v5wrdGeVgcFunVb40VPK3Mu0uyW4AvhCsPteLRUp1A==} + '@vuepress/shared@2.0.0-beta.66': resolution: {integrity: sha512-hMnFFHee6xLYVcSdpbKddcqunrOxIp2/B1gOGorcF5bZfnhJJWWsdZ//kwemAqlB8d10Z7f3x+b69Ur1LDPThw==} @@ -1141,18 +1187,46 @@ packages: sass-loader: optional: true + '@vuepress/utils@2.0.0-beta.45': + resolution: {integrity: sha512-vdhRs+Q3tuJiznQ3Vlckumpciv7uKm6kTcqkAInZJdtpa/vS+SAeeS3q8ThERC0I7z1mnW/s/CGkVlLKhrfjKA==} + '@vuepress/utils@2.0.0-beta.66': resolution: {integrity: sha512-CcgSG7ewI20iTdu1WCtQEBJiHfUgsGMg4TB4rActe9gPx8ZRoxZ8Jhr6bO3a4SU789PSBUzF7RYm9E1MtzATHg==} '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + '@vueuse/core@8.9.4': + resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + '@vueuse/metadata@8.9.4': + resolution: {integrity: sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==} + '@vueuse/shared@10.11.1': resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + '@vueuse/shared@8.9.4': + resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + '@waline/client@2.15.8': resolution: {integrity: sha512-EBL7RXJUJs742miTvOU0Vt8NEmeJ63EN5TtSsYZfzjUdvEtlv+JsBbS5uiz3C9v5qV7Hz+XDZdc8nc13mG9vNQ==} engines: {node: '>=14'} @@ -1173,6 +1247,9 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-sequence-parser@1.1.3: + resolution: {integrity: sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1194,6 +1271,10 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -1277,6 +1358,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} @@ -1301,6 +1385,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -1338,6 +1425,9 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chart.js@3.9.1: + resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} + chart.js@4.4.7: resolution: {integrity: sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==} engines: {pnpm: '>=8'} @@ -1357,6 +1447,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1607,6 +1701,9 @@ packages: dagre-d3-es@7.0.10: resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + dagre-d3-es@7.0.9: + resolution: {integrity: sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==} + dashjs@4.7.4: resolution: {integrity: sha512-+hldo25QPP3H/NOwqUrvt4uKdMse60/Gsz9AUAnoYfhga8qHWq4nWiojUosOiigbigkDTCAn9ORcvUaKCvmfCA==} @@ -1693,6 +1790,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@2.4.3: + resolution: {integrity: sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==} + dompurify@3.2.4: resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} @@ -1791,6 +1891,10 @@ packages: eve-raphael@0.5.0: resolution: {integrity: sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} @@ -1832,6 +1936,10 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + flowchart.js@1.18.0: + resolution: {integrity: sha512-1rZflSLyrj5/+ryzU+qIQr6IGysPIHT4UrgN+6IaVv7pLDSLu7CvC9e0X7FU6ocpRAEtHk5+UaFXv9NZKRoG3g==} + engines: {node: '>=4.0.0'} + flowchart.ts@1.0.1: resolution: {integrity: sha512-J0Sqob1Kt2MO+lKUH48h2uCIsTfEahXflKiOgVuG48T6p6oosVgaCl6TvjqNjP4pW1w8FVF4L1DbqHCxoxj5mA==} @@ -1855,6 +1963,10 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} @@ -1927,6 +2039,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + globby@13.2.2: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1981,6 +2097,10 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} @@ -2095,6 +2215,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -2154,6 +2278,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -2213,6 +2341,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -2220,6 +2351,10 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + katex@0.15.6: + resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==} + hasBin: true + katex@0.16.21: resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==} hasBin: true @@ -2286,6 +2421,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + log-symbols@5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} @@ -2362,6 +2501,9 @@ packages: mermaid@10.3.1: resolution: {integrity: sha512-hkenh7WkuRWPcob3oJtrN3W+yzrrIYuWF1OIfk/d0xGE8UWlvDhfexaHmDwwe8DKQgqMLI8DWEPwGprxkumjuw==} + mermaid@9.4.3: + resolution: {integrity: sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==} + mhchemparser@4.2.1: resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} @@ -2493,6 +2635,10 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2526,6 +2672,10 @@ packages: option-validator@2.0.6: resolution: {integrity: sha512-tmZDan2LRIRQyhUGvkff68/O0R8UmF+Btmiiz0SmSw2ng3CfPZB9wJlIjHpe/MKUZqyIZkVIXCrwr1tIN+0Dzg==} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ora@6.3.1: resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2718,6 +2868,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2821,6 +2975,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -2845,6 +3002,10 @@ packages: engines: {node: '>=12.0.0', npm: '>=5.6.0'} hasBin: true + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} @@ -2925,6 +3086,10 @@ packages: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -2960,6 +3125,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -3105,6 +3273,12 @@ packages: terser: optional: true + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} @@ -3264,6 +3438,15 @@ packages: vuepress-webpack: optional: true + vuepress-plugin-md-enhance@2.0.0-beta.66: + resolution: {integrity: sha512-SjP+sVq8MgxDiFlyo+ukFHhEcHQ5ePOg9l1eKtYVUUF17ZR8VcXOHI/UjAGIjdzy8UkQUkrMZRkvzwzWXQO9cQ==} + deprecated: Please use latest version + peerDependencies: + sass-loader: ^12.6.0 + peerDependenciesMeta: + sass-loader: + optional: true + vuepress-plugin-photo-swipe@2.0.0-beta.235: resolution: {integrity: sha512-f6VlntIBMxmoB1sdtL8b3kqunQNlN8AMH9+f28ylcueJ6cWXCvVvljW3ojy6H3+OlHQZMK+uSyf2AATnPA+Q0A==} engines: {node: '>=16.19.0', npm: '>=8', pnpm: '>=7'} @@ -3349,6 +3532,15 @@ packages: vuepress-webpack: optional: true + vuepress-plugin-sass-palette@2.0.0-beta.66: + resolution: {integrity: sha512-ehWIU/u0YfFCpN1282aEMAryuolNcl2JeglZ8ofSXJPw+51fFmYiFeUvQwRq7DDVsEcQOLhZ2E45/dIQlKCDrA==} + deprecated: Please use latest version + peerDependencies: + sass-loader: ^12.6.0 + peerDependenciesMeta: + sass-loader: + optional: true + vuepress-plugin-seo2@2.0.0-beta.235: resolution: {integrity: sha512-IBCDtI4jMMiD12i9t6R8nrtKSZnlF5wgoiw+6wAVEclV/pPSHUM+Kh2/qU7CZJhXxsRwyvStKxhXqwdjtxMN1w==} engines: {node: '>=16.19.0', npm: '>=8', pnpm: '>=7'} @@ -4459,6 +4651,23 @@ snapshots: '@types/markdown-it': 12.2.3 markdown-it: 13.0.2 + '@mr-hope/vuepress-shared@2.0.0-beta.66': + dependencies: + '@vuepress/client': 2.0.0-beta.45 + '@vuepress/plugin-git': 2.0.0-beta.45 + '@vuepress/plugin-theme-data': 2.0.0-beta.45 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + chalk: 4.1.2 + dayjs: 1.11.13 + execa: 5.1.1 + ora: 5.4.1 + vue: 3.5.13 + vue-router: 4.5.0(vue@3.5.13) + transitivePeerDependencies: + - supports-color + - typescript + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4610,6 +4819,10 @@ snapshots: '@types/jsonfile': 6.1.4 '@types/node': 22.13.1 + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 22.13.1 + '@types/gensync@1.0.4': {} '@types/hash-sum@1.0.2': {} @@ -4620,6 +4833,8 @@ snapshots: dependencies: '@types/node': 22.13.1 + '@types/katex@0.14.0': {} + '@types/katex@0.16.7': {} '@types/linkify-it@3.0.5': {} @@ -4653,6 +4868,8 @@ snapshots: '@types/mdurl@2.0.0': {} + '@types/mermaid@8.2.9': {} + '@types/ms@2.1.0': {} '@types/node@17.0.45': {} @@ -4673,6 +4890,8 @@ snapshots: '@types/unist@2.0.11': {} + '@types/web-bluetooth@0.0.14': {} + '@types/web-bluetooth@0.0.20': {} '@vitejs/plugin-vue@4.6.2(vite@4.4.12(@types/node@22.13.1)(sass@1.84.0)(terser@5.38.2))(vue@3.5.13)': @@ -4780,6 +4999,15 @@ snapshots: - supports-color - typescript + '@vuepress/client@2.0.0-beta.45': + dependencies: + '@vue/devtools-api': 6.6.4 + '@vuepress/shared': 2.0.0-beta.45 + vue: 3.5.13 + vue-router: 4.5.0(vue@3.5.13) + transitivePeerDependencies: + - typescript + '@vuepress/client@2.0.0-beta.66': dependencies: '@vue/devtools-api': 6.6.4 @@ -4791,6 +5019,19 @@ snapshots: - '@vue/composition-api' - typescript + '@vuepress/core@2.0.0-beta.45': + dependencies: + '@vuepress/client': 2.0.0-beta.45 + '@vuepress/markdown': 2.0.0-beta.45 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + gray-matter: 4.0.3 + toml: 3.0.0 + vue: 3.5.13 + transitivePeerDependencies: + - supports-color + - typescript + '@vuepress/core@2.0.0-beta.66': dependencies: '@vuepress/client': 2.0.0-beta.66 @@ -4803,6 +5044,18 @@ snapshots: - supports-color - typescript + '@vuepress/markdown@2.0.0-beta.45': + dependencies: + '@types/markdown-it': 12.2.3 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + markdown-it: 13.0.2 + markdown-it-anchor: 8.6.7(@types/markdown-it@12.2.3)(markdown-it@13.0.2) + markdown-it-emoji: 2.0.2 + mdurl: 1.0.1 + transitivePeerDependencies: + - supports-color + '@vuepress/markdown@2.0.0-beta.66': dependencies: '@mdit-vue/plugin-component': 0.12.1 @@ -4849,6 +5102,19 @@ snapshots: - supports-color - typescript + '@vuepress/plugin-container@2.0.0-beta.45': + dependencies: + '@types/markdown-it': 12.2.3 + '@vuepress/core': 2.0.0-beta.45 + '@vuepress/markdown': 2.0.0-beta.45 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + markdown-it: 13.0.2 + markdown-it-container: 3.0.0 + transitivePeerDependencies: + - supports-color + - typescript + '@vuepress/plugin-container@2.0.0-beta.66': dependencies: '@types/markdown-it': 12.2.3 @@ -4876,6 +5142,14 @@ snapshots: - supports-color - typescript + '@vuepress/plugin-git@2.0.0-beta.45': + dependencies: + '@vuepress/core': 2.0.0-beta.45 + execa: 5.1.1 + transitivePeerDependencies: + - supports-color + - typescript + '@vuepress/plugin-git@2.0.0-beta.66': dependencies: '@vuepress/core': 2.0.0-beta.66 @@ -4943,6 +5217,27 @@ snapshots: - supports-color - typescript + '@vuepress/plugin-shiki@2.0.0-beta.66': + dependencies: + '@vuepress/core': 2.0.0-beta.66 + shiki: 0.14.7 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + + '@vuepress/plugin-theme-data@2.0.0-beta.45': + dependencies: + '@vue/devtools-api': 6.6.4 + '@vuepress/client': 2.0.0-beta.45 + '@vuepress/core': 2.0.0-beta.45 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + vue: 3.5.13 + transitivePeerDependencies: + - supports-color + - typescript + '@vuepress/plugin-theme-data@2.0.0-beta.66': dependencies: '@vue/devtools-api': 6.6.4 @@ -4956,6 +5251,10 @@ snapshots: - supports-color - typescript + '@vuepress/shared@2.0.0-beta.45': + dependencies: + '@vue/shared': 3.5.13 + '@vuepress/shared@2.0.0-beta.66': dependencies: '@mdit-vue/types': 0.12.0 @@ -4986,6 +5285,21 @@ snapshots: - supports-color - typescript + '@vuepress/utils@2.0.0-beta.45': + dependencies: + '@types/debug': 4.1.12 + '@types/fs-extra': 9.0.13 + '@vuepress/shared': 2.0.0-beta.45 + chalk: 4.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + globby: 11.1.0 + hash-sum: 2.0.0 + ora: 5.4.1 + upath: 2.0.1 + transitivePeerDependencies: + - supports-color + '@vuepress/utils@2.0.0-beta.66': dependencies: '@types/debug': 4.1.12 @@ -5012,8 +5326,19 @@ snapshots: - '@vue/composition-api' - vue + '@vueuse/core@8.9.4(vue@3.5.13)': + dependencies: + '@types/web-bluetooth': 0.0.14 + '@vueuse/metadata': 8.9.4 + '@vueuse/shared': 8.9.4(vue@3.5.13) + vue-demi: 0.14.10(vue@3.5.13) + optionalDependencies: + vue: 3.5.13 + '@vueuse/metadata@10.11.1': {} + '@vueuse/metadata@8.9.4': {} + '@vueuse/shared@10.11.1(vue@3.5.13)': dependencies: vue-demi: 0.14.10(vue@3.5.13) @@ -5021,6 +5346,12 @@ snapshots: - '@vue/composition-api' - vue + '@vueuse/shared@8.9.4(vue@3.5.13)': + dependencies: + vue-demi: 0.14.10(vue@3.5.13) + optionalDependencies: + vue: 3.5.13 + '@waline/client@2.15.8': dependencies: '@vueuse/core': 10.11.1(vue@3.5.13) @@ -5044,6 +5375,8 @@ snapshots: ansi-regex@6.1.0: {} + ansi-sequence-parser@1.1.3: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -5066,6 +5399,8 @@ snapshots: call-bound: 1.0.3 is-array-buffer: 3.0.5 + array-union@2.1.0: {} + arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 @@ -5163,6 +5498,12 @@ snapshots: binary-extensions@2.3.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + bl@5.1.0: dependencies: buffer: 6.0.3 @@ -5193,6 +5534,11 @@ snapshots: buffer-from@1.1.2: {} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -5230,6 +5576,8 @@ snapshots: character-entities@2.0.2: {} + chart.js@3.9.1: {} + chart.js@4.4.7: dependencies: '@kurkle/color': 0.3.4 @@ -5269,6 +5617,10 @@ snapshots: dependencies: readdirp: 4.1.1 + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -5533,6 +5885,11 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 + dagre-d3-es@7.0.9: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 + dashjs@4.7.4: dependencies: bcp-47-match: 1.0.3 @@ -5625,6 +5982,8 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@2.4.3: {} + dompurify@3.2.4: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -5778,6 +6137,18 @@ snapshots: eve-raphael@0.5.0: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + execa@7.2.0: dependencies: cross-spawn: 7.0.6 @@ -5829,6 +6200,10 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + flowchart.js@1.18.0: + dependencies: + raphael: 2.3.0 + flowchart.ts@1.0.1: dependencies: '@types/raphael': 2.3.9 @@ -5849,6 +6224,12 @@ snapshots: fraction.js@4.3.7: {} + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 @@ -5936,6 +6317,15 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + globby@13.2.2: dependencies: dir-glob: 3.0.1 @@ -5990,6 +6380,8 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + human-signals@2.1.0: {} + human-signals@4.3.1: {} iconv-lite@0.6.3: @@ -6101,6 +6493,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -6150,6 +6544,8 @@ snapshots: dependencies: which-typed-array: 1.1.18 + is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} is-weakmap@2.0.2: {} @@ -6195,6 +6591,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -6203,6 +6601,10 @@ snapshots: jsonpointer@5.0.1: {} + katex@0.15.6: + dependencies: + commander: 8.3.0 + katex@0.16.21: dependencies: commander: 8.3.0 @@ -6263,6 +6665,11 @@ snapshots: lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + log-symbols@5.1.0: dependencies: chalk: 5.4.1 @@ -6371,6 +6778,25 @@ snapshots: transitivePeerDependencies: - supports-color + mermaid@9.4.3: + dependencies: + '@braintree/sanitize-url': 6.0.4 + cytoscape: 3.31.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.0) + cytoscape-fcose: 2.2.0(cytoscape@3.31.0) + d3: 7.9.0 + dagre-d3-es: 7.0.9 + dayjs: 1.11.13 + dompurify: 2.4.3 + elkjs: 0.8.2 + khroma: 2.1.0 + lodash-es: 4.17.21 + non-layered-tidy-tree-layout: 2.0.2 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 9.0.1 + web-worker: 1.5.0 + mhchemparser@4.2.1: {} micromark-core-commonmark@1.1.0: @@ -6555,6 +6981,10 @@ snapshots: normalize-range@0.1.2: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -6592,6 +7022,18 @@ snapshots: dependencies: kind-of: 6.0.3 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@6.3.1: dependencies: chalk: 5.4.1 @@ -6777,6 +7219,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -6884,6 +7331,13 @@ snapshots: shebang-regex@3.0.0: {} + shiki@0.14.7: + dependencies: + ansi-sequence-parser: 1.1.3 + jsonc-parser: 3.3.1 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -6921,6 +7375,8 @@ snapshots: arg: 5.0.2 sax: 1.4.1 + slash@3.0.0: {} + slash@4.0.0: {} smob@1.5.0: {} @@ -7019,6 +7475,8 @@ snapshots: strip-comments@2.0.1: {} + strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} striptags@3.2.0: {} @@ -7051,6 +7509,8 @@ snapshots: dependencies: is-number: 7.0.0 + toml@3.0.0: {} + tr46@1.0.1: dependencies: punycode: 2.3.1 @@ -7176,6 +7636,10 @@ snapshots: sass: 1.84.0 terser: 5.38.2 + vscode-oniguruma@1.7.0: {} + + vscode-textmate@8.0.0: {} + vue-demi@0.14.10(vue@3.5.13): dependencies: vue: 3.5.13 @@ -7382,6 +7846,35 @@ snapshots: - supports-color - typescript + vuepress-plugin-md-enhance@2.0.0-beta.66: + dependencies: + '@babel/core': 7.26.8 + '@mr-hope/vuepress-shared': 2.0.0-beta.66 + '@types/katex': 0.14.0 + '@types/markdown-it': 12.2.3 + '@types/mermaid': 8.2.9 + '@vuepress/client': 2.0.0-beta.45 + '@vuepress/plugin-container': 2.0.0-beta.45 + '@vuepress/shared': 2.0.0-beta.45 + '@vuepress/utils': 2.0.0-beta.45 + '@vueuse/core': 8.9.4(vue@3.5.13) + balloon-css: 1.2.0 + chart.js: 3.9.1 + echarts: 5.6.0 + flowchart.js: 1.18.0 + katex: 0.15.6 + markdown-it: 13.0.2 + mermaid: 9.4.3 + reveal.js: 4.6.1 + ts-debounce: 4.0.0 + vue: 3.5.13 + vue-router: 4.5.0(vue@3.5.13) + vuepress-plugin-sass-palette: 2.0.0-beta.66 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + vuepress-plugin-photo-swipe@2.0.0-beta.235(vuepress-vite@2.0.0-beta.66(@types/node@22.13.1)(@vuepress/client@2.0.0-beta.66)(sass@1.84.0)(terser@5.38.2)(vue@3.5.13))(vuepress@2.0.0-beta.66(@types/node@22.13.1)(@vuepress/client@2.0.0-beta.66)(sass@1.84.0)(terser@5.38.2)(vue@3.5.13)): dependencies: '@vuepress/client': 2.0.0-beta.66 @@ -7466,6 +7959,16 @@ snapshots: - supports-color - typescript + vuepress-plugin-sass-palette@2.0.0-beta.66: + dependencies: + '@mr-hope/vuepress-shared': 2.0.0-beta.66 + '@vuepress/utils': 2.0.0-beta.45 + chokidar: 3.6.0 + sass: 1.84.0 + transitivePeerDependencies: + - supports-color + - typescript + vuepress-plugin-seo2@2.0.0-beta.235(vuepress-vite@2.0.0-beta.66(@types/node@22.13.1)(@vuepress/client@2.0.0-beta.66)(sass@1.84.0)(terser@5.38.2)(vue@3.5.13))(vuepress@2.0.0-beta.66(@types/node@22.13.1)(@vuepress/client@2.0.0-beta.66)(sass@1.84.0)(terser@5.38.2)(vue@3.5.13)): dependencies: '@vuepress/shared': 2.0.0-beta.66 diff --git a/src/.vuepress/config.ts b/src/.vuepress/config.ts index 5937f8384..a73847ba3 100644 --- a/src/.vuepress/config.ts +++ b/src/.vuepress/config.ts @@ -1,6 +1,8 @@ import { defineUserConfig } from "vuepress"; import theme from "./theme.js"; import { searchPlugin } from "@vuepress/plugin-search"; +import { shikiPlugin } from "@vuepress/plugin-shiki"; +import path from 'path' export default defineUserConfig({ base: "/", plugins: [ @@ -14,6 +16,28 @@ export default defineUserConfig({ }, }, }), + shikiPlugin({ + theme: "dracula", + langs: [ + { + id: "webgal", + aliases: [ + "webgal", + "WebGAL", + "Webgal", + "ws", + "webgal-script", + "WebgalScript", + "Webgal Script", + "WebGAL Script", + ], + scopeName: "source.webgal", + path: path.resolve(__dirname, "../grammar/webgal.tmLanguage.json"), + }, + "ts", "bash", "json", "xml", "kotlin", + ], + + }), ], locales: { "/": { diff --git a/src/.vuepress/sidebar/zh.ts b/src/.vuepress/sidebar/zh.ts index 54762b4ad..49b35dfc4 100644 --- a/src/.vuepress/sidebar/zh.ts +++ b/src/.vuepress/sidebar/zh.ts @@ -52,5 +52,56 @@ export const zhSidebar = sidebar({ "developers/terre", ] }, + { + text: "脚本参考", + prefix: "script-reference/", + children: [ + { + text: "命令", + prefix: "commands/", + children:[ + "global", + "say", + "changeBg", + "changeFigure", + "bgm", + "playVideo", + "pixiPerform", + "pixiInit", + "intro", + "miniAvatar", + "changeScene", + "choose", + "end", + "setComplexAnimation", + "label", + "jumpLabel", + "setVar", + "callScene", + "showVars", + "unlockCg", + "unlockBgm", + "filmMode", + "setTextbox", + "setAnimation", + "playEffect", + "setTempAnimation", + "comment", + "setTransform", + "setTransition", + "getUserInput", + "applyStyle", + "wait", + ] + }, + { + text: "其他", + prefix: "others/", + children:[ + "transform-reference", + ] + }, + ], + }, ], }); diff --git a/src/.vuepress/styles/palette.scss b/src/.vuepress/styles/palette.scss index c7ee31b3b..402472065 100644 --- a/src/.vuepress/styles/palette.scss +++ b/src/.vuepress/styles/palette.scss @@ -1,2 +1,2 @@ // you can change colors here -$theme-color: #005caf; \ No newline at end of file +$theme-color: #2893f7; \ No newline at end of file diff --git a/src/en/publish/android/readme.md b/src/en/publish/android/readme.md index 25a15255c..eed8c96a0 100644 --- a/src/en/publish/android/readme.md +++ b/src/en/publish/android/readme.md @@ -49,7 +49,7 @@ The game loads `project folder\app\src\main\assets\webgal\index.html` by default Open Android Studio to open the project. Modify the `rootProject.name` field in the `project folder\settings.gradle` file. -``` gradle +``` ... rootProject.name = "WebGAL" //Modify the project title ... @@ -65,7 +65,7 @@ Modify the title information in `project folder\app\src\main\res\values\strings. Modify the `namespace` and `applicationId` fields in `project folder\app\build.gradle` to the reverse of the domain name. -``` gradle +``` ... android { namespace 'com.openwebgal.demo' //Modify the package name diff --git a/src/grammar/webgal.tmLanguage.json b/src/grammar/webgal.tmLanguage.json new file mode 100644 index 000000000..d4b44426e --- /dev/null +++ b/src/grammar/webgal.tmLanguage.json @@ -0,0 +1,266 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "WebGAL Script", + "patterns": [ + { + "include": "#comment-line" + }, + { + "include": "#statement" + } + ], + "repository": { + "argument-list": { + "patterns": [ + { + "comment": ">1 arguments left, ie -kwarg0=val0 -kwarg1=val1 ...", + "match": "(\\s\\-)(.*?)(\\s\\-.*)$", + "captures": { + "1": { + "patterns": [ + { + "include": "#operator" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#parameter" + } + ] + }, + "3": { + "patterns": [ + { + "include": "#argument-list" + } + ] + } + } + }, + { + "comment": "only one argument left, ie -kwarg0=val0", + "match": "(\\s\\-)(.*)", + "captures": { + "1": { + "patterns": [ + { + "include": "#operator" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#parameter" + } + ] + } + } + } + ] + }, + "character": { + "match": ".*", + "name": "markup.changed" + }, + "command": { + "match": ".*", + "name": "punctuation.definition.character-class.regexp" + }, + "comment-line": { + "match": "\\;.*?$", + "name": "comment" + }, + "operator": { + "match": "[\\:\\=\\<\\>\\|\\+\\-]", + "name": "markup.deleted" + }, + "parameter": { + "patterns": [ + { + "comment": "value only, ie val0", + "match": "(?!.*\\=).+", + "name": "markup.changed" + }, + { + "comment": "name and value, ie [kwarg0]=[val0]", + "match": "(.*?)(\\=)(.*?)$", + "captures": { + "1": { + "name": "markup.changed" + }, + "2": { + "patterns": [ + { + "include": "#operator" + } + ] + }, + "3": { + "name": "markup.inserted" + } + } + } + ] + }, + "utterance": { + "patterns": [ + { + "comment": "utterance only", + "match": "(?!.*\\s\\-)(.+)", + "captures": { + "0": { + "name": "string.regexp" + } + } + }, + { + "comment": "utterance and argument list", + "match": "(.*?)(\\s\\-.*?)$", + "captures": { + "1": { + "name": "string.regexp" + }, + "2": { + "patterns": [ + { + "include": "#argument-list" + } + ] + } + } + } + ] + }, + "character-colon": { + "comment": "[char]:[utt[ -args]][;cmt]", + "match": "^(?!(?:say|changeBg|changeFigure|bgm|playVideo|pixiPerform|pixiInit|intro|miniAvatar|changeScene|choose|end|setComplexAnimation|setFilter|label|jumpLabel|chooseLabel|setVar|if|callScene|showVars|unlockCg|unlockBgm|filmMode|setTextbox|setAnimation|playEffect|setTempAnimation|comment|setTransform|setTransition|getUserInput|applyStyle|wait)\\:)(.*?)(\\:)([^\\;\\n]*?)($|\\;.*?$)", + "captures": { + "1": { + "name": "meta.character.webgal", + "patterns": [ + { + "include": "#character" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#operator" + } + ] + }, + "3": { + "patterns": [ + { + "include": "#utterance" + } + ] + }, + "4": { + "patterns": [ + { + "include": "#comment-line" + } + ] + } + } + }, + "command-colon": { + "comment": "cmd:[arg0[ -args]][;cmt]", + "match": "^(say|changeBg|changeFigure|bgm|playVideo|pixiPerform|pixiInit|intro|miniAvatar|changeScene|choose|end|setComplexAnimation|setFilter|label|jumpLabel|chooseLabel|setVar|if|callScene|showVars|unlockCg|unlockBgm|filmMode|setTextbox|setAnimation|playEffect|setTempAnimation|comment|setTransform|setTransition|getUserInput|applyStyle|wait)(\\:)([^\\;\\n]*?)($|\\;.*?$)", + "captures": { + "1": { + "name": "meta.command.webgal", + "patterns": [ + { + "include": "#command" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#operator" + } + ] + }, + "3": { + "patterns": [ + { + "include": "#argument-list" + } + ] + }, + "4": { + "patterns": [ + { + "include": "#comment-line" + } + ] + } + } + }, + "command-semicolon": { + "comment": "cmd;[cmt]", + "match": "^(say|changeBg|changeFigure|bgm|playVideo|pixiPerform|pixiInit|intro|miniAvatar|changeScene|choose|end|setComplexAnimation|setFilter|label|jumpLabel|chooseLabel|setVar|if|callScene|showVars|unlockCg|unlockBgm|filmMode|setTextbox|setAnimation|playEffect|setTempAnimation|comment|setTransform|setTransition|getUserInput|applyStyle|wait)($|\\;.*?$)", + "captures": { + "1": { + "name": "meta.command.webgal", + "patterns": [ + { + "include": "#command" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#comment-line" + } + ] + } + } + }, + "utterance-semicolon": { + "comment": "utt[ -args];[cmt]", + "match": "^(?!(?:say|changeBg|changeFigure|bgm|playVideo|pixiPerform|pixiInit|intro|miniAvatar|changeScene|choose|end|setComplexAnimation|setFilter|label|jumpLabel|chooseLabel|setVar|if|callScene|showVars|unlockCg|unlockBgm|filmMode|setTextbox|setAnimation|playEffect|setTempAnimation|comment|setTransform|setTransition|getUserInput|applyStyle|wait)\\;)([^\\:\\;\n]+?)(\\;.*)?$", + "captures": { + "1": { + "patterns": [ + { + "include": "#utterance" + } + ] + }, + "2": { + "patterns": [ + { + "include": "#comment-line" + } + ] + } + } + }, + "statement": { + "patterns": [ + { + "include": "#character-colon" + }, + { + "include": "#command-colon" + }, + { + "include": "#command-semicolon" + }, + { + "include": "#utterance-semicolon" + } + ] + } + }, + "scopeName": "source.webgal" +} diff --git a/src/ja/publish/android/readme.md b/src/ja/publish/android/readme.md index 6e58f146f..230005aaf 100644 --- a/src/ja/publish/android/readme.md +++ b/src/ja/publish/android/readme.md @@ -49,7 +49,7 @@ android studioを開き、エクスポートしたばかりの「android」デ Android Studioを開いてプロジェクトを開きます。 「プロジェクトフォルダ\settings.gradle」ファイルの「rootProject.name」フィールドを変更します。 -``` gradle +``` ... rootProject.name = "WebGAL" //プロジェクトタイトルを変更 ... @@ -65,7 +65,7 @@ rootProject.name = "WebGAL" //プロジェクトタイトルを変更 「プロジェクトフォルダ\app\build.gradle」の「namespace」と「applicationId」フィールドを、ドメインを逆にした形式に変更します。 -``` gradle +``` ... android { namespace 'com.openwebgal.demo' //パッケージ名を変更 diff --git a/src/publish/android/readme.md b/src/publish/android/readme.md index b92e0ae2a..8ad2ac027 100644 --- a/src/publish/android/readme.md +++ b/src/publish/android/readme.md @@ -49,7 +49,7 @@ 打开 Android Studio 打开项目。 修改 `项目文件夹\settings.gradle` 文件中的 `rootProject.name` 字段。 -``` gradle +``` ... rootProject.name = "WebGAL" //修改项目标题 ... @@ -65,7 +65,7 @@ rootProject.name = "WebGAL" //修改项目标题 修改 `项目文件夹\app\build.gradle` 中的 `namespace` 和 `applicationId` 字段,格式为域名反写。 -``` gradle +``` ... android { namespace 'com.openwebgal.demo' //修改包名 diff --git a/src/script-reference/arguments/duration.md b/src/script-reference/arguments/duration.md new file mode 100644 index 000000000..702e91ef4 --- /dev/null +++ b/src/script-reference/arguments/duration.md @@ -0,0 +1,6 @@ +### duration +- 数字 +- 范围:0 到正无穷 +- 单位:毫秒 + +动画的持续时间。 diff --git a/src/script-reference/arguments/ease.md b/src/script-reference/arguments/ease.md new file mode 100644 index 000000000..43bbab8a8 --- /dev/null +++ b/src/script-reference/arguments/ease.md @@ -0,0 +1,20 @@ +### ease +- 字符串 + +填写缓动类型,控制动画的缓动效果,默认值为 `easeInOut`,可选值包括 +- `linear`:线性 +- `easeIn`:缓入 +- `easeOut`:缓出 +- `easeInOut`:缓入缓出 +- `circIn`:圆形缓入 +- `circOut`:圆形缓出 +- `circInOut`:圆形缓入缓出 +- `backIn`:起点回弹 +- `backOut`:终点回弹 +- `backInOut`:起止回弹 +- `bounceIn`:起点弹跳 +- `bounceOut`:终点弹跳 +- `bounceInOut`:起止弹跳 +- `anticipate`:预先反向 + +任何其他字符串都会回退到默认值。 diff --git a/src/script-reference/arguments/enter.md b/src/script-reference/arguments/enter.md new file mode 100644 index 000000000..063b67258 --- /dev/null +++ b/src/script-reference/arguments/enter.md @@ -0,0 +1,4 @@ +### enter +- 字符串 + +填写动画名称,对象出场时将播放该动画,顶替默认的透明度淡入的入场动画。 diff --git a/src/script-reference/arguments/exit.md b/src/script-reference/arguments/exit.md new file mode 100644 index 000000000..7b6159579 --- /dev/null +++ b/src/script-reference/arguments/exit.md @@ -0,0 +1,4 @@ +### exit +- 字符串 + +填写动画名称,对象退场时将播放该动画,顶替默认的透明度淡出的退场动画。 diff --git a/src/script-reference/arguments/keep.md b/src/script-reference/arguments/keep.md new file mode 100644 index 000000000..c336d3f7f --- /dev/null +++ b/src/script-reference/arguments/keep.md @@ -0,0 +1,5 @@ +### keep +- 布尔值 + +将该动画转换为跨语句动画。在执行接下来的语句的同时,保持播放当前动画,直至动画结束,或被下一个同目标的 `setTransform` `setAnimation` `setTempAnimation` 打断。 +通常需要配合 `next` 参数一起使用。 diff --git a/src/script-reference/arguments/name-bgm.md b/src/script-reference/arguments/name-bgm.md new file mode 100644 index 000000000..39824d169 --- /dev/null +++ b/src/script-reference/arguments/name-bgm.md @@ -0,0 +1,5 @@ +- 字符串 + +填写一个名称,BGM 鉴赏将收录该音乐,并以该名称进行展示。如果不填写该参数,或名称为空,则不会收录此音乐。 + +同一首音乐(严格来说是同路径的音乐)只能拥有一个展示名称。如果同一首音乐以不同的名称被收录多次,仅保留最后一次收录时填写的名称。 diff --git a/src/script-reference/arguments/name-cg.md b/src/script-reference/arguments/name-cg.md new file mode 100644 index 000000000..8edc88af0 --- /dev/null +++ b/src/script-reference/arguments/name-cg.md @@ -0,0 +1,5 @@ +- 字符串 + +填写一个名称,CG 鉴赏将收录该图片,并以该名称进行展示。如果不填写该参数,或名称为空,则不会收录此图片。 + +同一张图片(严格来说是同路径的图片)只能拥有一个展示名称。如果同一张图片以不同的名称被收录多次,仅保留最后一次收录时填写的名称。 diff --git a/src/script-reference/arguments/series-bgm.md b/src/script-reference/arguments/series-bgm.md new file mode 100644 index 000000000..71fc2b814 --- /dev/null +++ b/src/script-reference/arguments/series-bgm.md @@ -0,0 +1,17 @@ +- 字符串 + +填写一个名称,BGM 鉴赏将收录该音乐到指定名称的系列中,如果不填写该参数,或系列名称为空,则会将该音乐收录到默认系列中。 + +``` +默认系列 + | - BGM 名称 1 + | - BGM 名称 2 +系列名称 1 + | - BGM 名称 3 + | - BGM 名称 4 + | - BGM 名称 5 +系列名称 2 + | - BGM 名称 6 +``` + +同一首音乐(严格来说是同路径的音乐)只能拥有存在于一个系列。如果同一首音乐被收录在多个系列中,该音乐只会存在于最后一次收录时填写的系列中。 diff --git a/src/script-reference/arguments/series-cg.md b/src/script-reference/arguments/series-cg.md new file mode 100644 index 000000000..60f22a654 --- /dev/null +++ b/src/script-reference/arguments/series-cg.md @@ -0,0 +1,17 @@ +- 字符串 + +填写一个名称,CG 鉴赏将收录该图片到指定名称的系列中,如果不填写该参数,或系列名称为空,则会将该图片收录到默认系列中。 + +``` +默认系列 + | - CG 名称 1 + | - CG 名称 2 +系列名称 1 + | - CG 名称 3 + | - CG 名称 4 + | - CG 名称 5 +系列名称 2 + | - CG 名称 6 +``` + +同一张图片(严格来说是同路径的图片)只能拥有存在于一个系列。如果同一张图片被收录在多个系列中,该图片只会存在于最后一次收录时填写的系列中。 diff --git a/src/script-reference/arguments/target.md b/src/script-reference/arguments/target.md new file mode 100644 index 000000000..e8a8535b8 --- /dev/null +++ b/src/script-reference/arguments/target.md @@ -0,0 +1,12 @@ +### target +- 字符串 + +动画作用目标。 + +可以填写的目标有: +- `fig-center`:中间立绘 +- `fig-left`:左侧立绘 +- `fig-right`:右侧立绘 +- 自由立绘的 id +- `bg-main`:背景 +- `stage-main`:舞台 diff --git a/src/script-reference/arguments/transform.md b/src/script-reference/arguments/transform.md new file mode 100644 index 000000000..a45aac87a --- /dev/null +++ b/src/script-reference/arguments/transform.md @@ -0,0 +1,8 @@ +### transform +- 字符串 + +填写 json 字符串,控制舞台对象的变换与效果。详情请见 [变换效果参考](../others/transform-reference.md) 。 + +::: warning +此参数仅在对象入场,或替换对象时生效。如果需要修改在场对象的变换效果,请使用 `setTransform`、`setAnimation`、`setTempAnimation` 等命令。 +::: diff --git a/src/script-reference/arguments/volume.md b/src/script-reference/arguments/volume.md new file mode 100644 index 000000000..5bd8904b4 --- /dev/null +++ b/src/script-reference/arguments/volume.md @@ -0,0 +1,6 @@ +### volume +- 数字 +- 范围:0 到 100 +- 默认值:100 + +音乐音量百分比。 diff --git a/src/script-reference/arguments/writeDefault.md b/src/script-reference/arguments/writeDefault.md new file mode 100644 index 000000000..fbab8356f --- /dev/null +++ b/src/script-reference/arguments/writeDefault.md @@ -0,0 +1,5 @@ +### writeDefault +- 布尔值 + +当值为 `true` 时,未被赋值的[变换与效果](../others/transform-reference.md)属性都会写入默认值。 +当值为 `false` 时,未被赋值的属性会继承现有的值。 diff --git a/src/script-reference/commands/applyStyle.md b/src/script-reference/commands/applyStyle.md new file mode 100644 index 000000000..39a7fa696 --- /dev/null +++ b/src/script-reference/commands/applyStyle.md @@ -0,0 +1,25 @@ +# applyStyle + +更换 UI 样式。 + +## 语句内容 + +首先需要在 UI 模板中新写一个样式,然后可以用 `applyStyle` 命令,将新样式替换原样式。 +原样式名与新样式名之间用 `->` 连接,您可以同时替换多个样式,每个替换之间用英文逗号 `,` 分隔。 +格式如:原样式名->新样式名,原样式名2->新样式名2,... + +```webgal +; 将角色名背景替换为红色,前提是在 UI 模板里写了新样式 +applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Red; +角色名:这是一句话; +; 同时替换多个样式 +applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Green,TextBox_main->TextBox_main_Black; +``` + +无论原样式被替换为什么新样式,替换样式依旧是原样式名在前; + +```webgal +applyStyle:原样式名->新样式名1; +applyStyle:新样式名1->新样式名2; 错误 +applyStyle:原样式名->新样式名2; +``` diff --git a/src/script-reference/commands/bgm.md b/src/script-reference/commands/bgm.md new file mode 100644 index 000000000..cc1a3318a --- /dev/null +++ b/src/script-reference/commands/bgm.md @@ -0,0 +1,60 @@ +# bgm + +播放背景音乐、切换背景音乐、停止背景音乐、设置背景音乐参数的四合一命令。 + +## 语句内容 + +填写背景音乐的路径。当文件路径为空或为 none 时,表示停止播放。 +详情请见[音频](../../webgal-script/audio.md)。 + +```webgal +; 如果没有背景音乐,则此句表示播放背景音乐。 +bgm:01.wav; +; 如果已有背景音乐存在,则此句表示切换背景音乐。 +bgm:02.wav; +; 如果填写 none 或不填时,则此句表示停止播放背景音乐。 +bgm:; +``` + +若背景音乐的路径不变,则不会打断背景音乐, 而是将新参数应用到背景音乐上。 + +```webgal +bgm:morning.wav; +; 调整音量,但不会打断背景音乐 +bgm:morning.wav -volume=50; +``` + +## 参数 + + +```webgal +bgm:01.wav -volume=100; +bgm:01.wav -volume=50; 调整音量 +``` + +### enter +- 数字 +- 单位:毫秒 +- 范围:0 到正无穷 +- 默认值:0 + +背景音乐的淡入时间。 + +```webgal +bgm:01.wav -enter=1500; +bgm:02.wav -enter=1500; +``` + +### unlockname + +```webgal +bgm:01.wav -unlockname=MyBgm01; +``` + +### series + +单独填写 `series` 不会进行收录,请确保同时填写了 `unlockname`。 + +```webgal +bgm:01.wav -unlockname=MyBgm01 -series=MySeries01; +``` diff --git a/src/script-reference/commands/callScene.md b/src/script-reference/commands/callScene.md new file mode 100644 index 000000000..c32be7fbb --- /dev/null +++ b/src/script-reference/commands/callScene.md @@ -0,0 +1,17 @@ +# callScene + +调用场景。 + +## 语句内容 + +临时加载新场景的内容,新场景结束后,继续执行原场景。 + +::: warning +调用场景不会清空当前场景(如立绘、背景),若没有主动关闭,它们将被带到新场景中。 +::: + +```webgal +角色A:我记得在商店的时候......; +callScene:chapter_01/shop.txt; +角色A:原来是这样,我知道是怎么回事了; +``` diff --git a/src/script-reference/commands/changeBg.md b/src/script-reference/commands/changeBg.md new file mode 100644 index 000000000..d416a28ab --- /dev/null +++ b/src/script-reference/commands/changeBg.md @@ -0,0 +1,62 @@ +# changeBg + +背景入场, 替换背景, 背景退场的三合一命令。 + +## 语句内容 + +填写背景图片的路径。当文件路径为空或为 `none` 时,表示背景退场。 +详情请见[背景与立绘](../../webgal-script/bg-and-figure.md)。 + +```webgal +; 如果没有背景存在,则此句表示背景入场。 +changeBg:bg.png; +; 如果已有背景存在,则此句表示替换背景。 +changeBg:WebGAL_New_Enter_Image.png; +; 如果填写 none 或者不填,则此句表示背景退场。 +changeBg:none; +``` + +如果背景图片的路径与 `id` 保持不变,则不会触发入场或退场动画。 + +## 参数 + + +```webgal +changeBg:bg.png -transform={"position":{"x":-50,"y":-20},"rotation":0.1,"scale":{"x":1.2,"y":1.2},"brightness":0.5,"blur":10}; +``` + + +```webgal +changeBg:bg.png -enter=enter-from-left; +``` + + +```webgal +changeBg:bg.png -exit=exit-to-right; +``` + + +作用于默认入场退场动画,默认值为 1000。 +```webgal +changeBg:bg.png -duration=200; +``` + + +作用于默认入场退场动画。 +```webgal +changeBg:bg.png -ease=easeOut; +``` + +### unlockname + +```webgal +changeBg:bg.png -unlockname=MyCg01; +``` + +### series + +单独填写 `series` 不会进行收录,请确保同时填写了 `unlockname`。 + +```webgal +changeBg:bg.png -unlockname=MyCg01 -series=MySeries01; +``` diff --git a/src/script-reference/commands/changeFigure.md b/src/script-reference/commands/changeFigure.md new file mode 100644 index 000000000..7b9cee0b5 --- /dev/null +++ b/src/script-reference/commands/changeFigure.md @@ -0,0 +1,256 @@ +# changeFigure + +立绘入场, 替换立绘, 立绘退场,设置立绘参数的四合一命令。 + +## 语句内容 + +填写立绘的路径。当文件路径为空或为 `none` 时,表示立绘退场。 +详情请见[背景与立绘](../../webgal-script/bg-and-figure.md)。 + +```webgal +; 如果没有立绘存在,则此句表示立绘入场。 +changeFigure:1/open_eyes.png; +; 如果已有立绘存在,则此句表示替换立绘。 +changeFigure:2/open_eyes.png; +; 如果填写 none 或者不填,则此句表示立绘退场。 +changeFigure:none; +``` + +如果立绘的路径与 `id` 保持不变,则不会触发入场或退场动画,而是将新参数应用到目标立绘上。 + +```webgal +; Live2d 立绘入场 +changeFigure:character_a/model.json -id=aaa; +; 修改 Live2d 立绘的动作表情 +changeFigure:character_a/model.json -id=aaa -motion=smile -expression=sad; +``` + +目前 WebGAL 支持图片立绘,Live2D 立绘和 Spine 立绘。 + +### 图片立绘 + +任何不是 Live2D 或 Spine 的格式,都将尝试作为图片立绘导入。 +```webgal +changeFigure:1/open_eyes.png; +``` + +### Live2D 立绘 + +:::info +使用 Live2D 需要开发者做一些准备工作,详情请见 [关于Live2D](../../live2D.md)。 +::: + +填入 Live2D 模型 (.json/.model3.json) 的路径,WebGAL 会加载 Live2D 模型。 + +```webgal +changeFigure:character_a/model.json; +``` + +### Spine 立绘 + +:::info +使用 Spine 需要开发者做一些准备工作,详情请见 [关于Spine](../../spine.md)。 +::: + +如果您的 Spine 模型是 .skel 格式,您可以直接填写该文件的路径。 + +```webgal +changeFigure:character_x/model.skel; +``` + +如果您的 Spine 模型是 .json 格式,您需要在路径后指定立绘类型为 Spine,避免误当作 Live2D 模型导入。 + +```webgal +changeFigure:character_x/model.json?type=spine; +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -transform={"position":{"x":-50,"y":-20},"rotation":0.1,"scale":{"x":1.2,"y":1.2},"brightness":0.5,"blur":10}; +``` + + +```webgal +changeFigure:1/open_eyes.png -enter=enter-from-left; +``` + + +```webgal +changeFigure:1/open_eyes.png -exit=exit-to-right; +``` + + +作用于默认入场退场动画,默认值为 1000。 +```webgal +changeFigure:1/open_eyes.png -duration=200; +``` + + +作用于默认入场退场动画。 +```webgal +changeFigure:1/open_eyes.png -ease=easeOut; +``` + +### left +- 布尔值 + +当值为 `true` 时,新立绘出场时将位于舞台左侧,对象坐标原点也会向左偏移。 +若参数 `id` 未填写或值为空字符串时,默认赋予该立绘以 `fig-left` 的 id。 + +::: warning +此参数仅在立绘出场,或替换立绘时生效。如果需要修改在场立绘的坐标,请使用 `setTransform`、`setAnimation`、`setTempAnimation` 等命令。 +::: + +```webgal +changeFigure:1/open_eyes.png -left; +``` + +### right +- 布尔值 + +当值为 `true` 时,新立绘出场时将位于舞台右侧,对象坐标原点也会向右偏移。 +若参数 `id` 未填写或值为空字符串时,默认赋予该立绘以 `fig-right` 的 id。 + +::: warning +此参数仅在立绘出场,或替换立绘时生效。如果需要修改在场立绘的坐标,请使用 `setTransform`、`setAnimation`、`setTempAnimation` 等命令。 +::: + +```webgal +changeFigure:1/open_eyes.png -right; +``` + +### id +- 字符串 + +填写名称作为该立绘的唯一标识符,并将该立绘视作自由立绘。 + +若未填写该参数,或值为空字符串时 +- 若 `left` 参数为 `true`,则默认赋予该立绘以 `fig-left` 的 id +- 若 `right` 参数为 `true`,则默认赋予该立绘以 `fig-right` 的 id +- 若 `left` 和 `right` 参数均为 `false`,则默认赋予该立绘以 `fig-center` 的 id + +```webgal +; 填写了不同 id 后,即使初始位置相同,立绘也不会相互顶替。 +changeFigure:1/open_eyes.png -id=aaa; +changeFigure:2/open_eyes.png -id=bbb; +; 此时 -left -right 仅与初始位置有关,可以与 -id 一起使用。 +changeFigure:3/open_eyes.png -id=ccc -left; +``` + +### zIndex +- 数字 (整数) +- 范围: 0 到正无穷 + +立绘的层级,数值越大,立绘图层越靠上。如果数值相同,则入场较晚的立绘图层会更靠上。 +若不填写该参数,默认值为0。 + +```webgal +; 立绘 aaa 会在立绘 bbb 上方。 +changeFigure:1/open_eyes.png -id=aaa -zIndex=2; +changeFigure:2/open_eyes.png -id=bbb -zIndex=1; +``` + +### clear +- 布尔值 + +将语句内容替换为空字符串。 + +```webgal +changeFigure:1/open_eyes.png -clear; +``` + +### none +- 布尔值 + +将语句内容替换为空字符串。 + +```webgal +changeFigure:1/open_eyes.png -none; +``` + +### animationFlag +- 字符串 + +动画标志,暂无实际作用。 + +### mouthOpen +- 字符串 + +填写图片立绘的路径,作为张嘴时的立绘差分。 + +```webgal +changeFigure:1/open_eyes.png -mouthOpen=1/open_mouth.png; +``` + +### mouthHalfOpen +- 字符串 + +填写图片立绘的路径,作为半张嘴时的立绘差分。 + +```webgal +changeFigure:1/open_eyes.png -mouthHalfOpen=1/halfopen_mouth.png; +``` + +### mouthClose +- 字符串 + +填写图片立绘的路径,作为闭嘴时的立绘差分。 + +```webgal +changeFigure:1/open_eyes.png -mouthClose=1/closed_mouth.png; +``` + +### eyesOpen +- 字符串 + +填写图片立绘的路径,作为睁眼时的立绘差分。 + +```webgal +changeFigure:1/open_eyes.png -eyesOpen=1/open_eyes.png; +``` + +### eyesClose +- 字符串 + +填写图片立绘的路径,作为睁眼时的立绘差分。 + +```webgal +changeFigure:1/open_eyes.png -eyesClose=1/closed_eyes.png; +``` + +### motion +- 字符串 + +对于 Live2D 立绘或 Spine 立绘,填写动作名称,播放对应的动作动画。 + +```webgal +changeFigure:character_a/model.json -motion=sad; +changeFigure:character_a/model.json -motion=smile; +``` + +### expression +- 字符串 + +对于 Live2D 立绘,填写表情名称,切换对应的表情。 + +```webgal +changeFigure:character_a/model.json -expression=smile; +changeFigure:character_a/model.json -expression=sad; +``` + +### bounds +- 字符串 + +对于 Live2D 立绘,填写 number[4] 数组,拓展或收缩立绘的显示区域。 +以向右和向下为正方向,顺序为 `左,上,右,下`。 + +::: warning +此参数仅在立绘出场,或替换立绘时生效。 +::: + +```webgal +; 往左和往右拓展 300 像素 +changeFigure:character_a/model.json -bounds=-300,0,300,0; +``` diff --git a/src/script-reference/commands/changeScene.md b/src/script-reference/commands/changeScene.md new file mode 100644 index 000000000..dcb8ba3ff --- /dev/null +++ b/src/script-reference/commands/changeScene.md @@ -0,0 +1,29 @@ +# changeScene + +切换场景。 + +## 语句内容 + +填写场景文件的路径,将切换到对应场景。 +详情请见[场景与分支](../../webgal-script/scenes.md)。 + +::: warning +切换场景不会清空当前场景(如立绘、背景),若没有主动关闭,它们将被带到新场景中。 +::: + +- chapter_01/part_01.txt +```webgal +changeBg:home/character_a/bedroom.png; +changeFigure:main_character/character_a/thinking.png -next; +角色A:今天去她家里吧!; +changeBg:none -next; 手动关闭背景 +changeFigure:none -next; 手动关闭立绘 +:; 手动关闭对话框 +changeScene:chapter_01/part_02.txt; +``` +- chapter_01/part_02.txt +```webgal +changeBg:home/character_b/living_room.png; +changeFigure:main_character/character_b/smile.png -next; +角色B:是你啊,有什么事吗?; +``` diff --git a/src/script-reference/commands/choose.md b/src/script-reference/commands/choose.md new file mode 100644 index 000000000..dd6b586ba --- /dev/null +++ b/src/script-reference/commands/choose.md @@ -0,0 +1,20 @@ +# choose + +显示选项。 + +## 语句内容 + +填写多个选项。每个选项包括 __选项文本__ 和 __跳转目标__ 两个部分,用英文冒号 `:` 分割;每个选项之间用 `|` 分隔。 +详情请见[分支选择](../../webgal-script/scenes.md#分支选择)。 + +目前可以跳转至 +- 场景文件 +- 本场景的某个标签 + +```webgal +角色A:今天去哪儿呢?; +choose:去商店:chapter_01/shop.txt|某人家里:chapter_01/house_b.txt|待在家里:home; +; +label:home; +角色A:还是待在家里吧。; +``` diff --git a/src/script-reference/commands/comment.md b/src/script-reference/commands/comment.md new file mode 100644 index 000000000..116baeb94 --- /dev/null +++ b/src/script-reference/commands/comment.md @@ -0,0 +1,20 @@ +# comment + +单行注释。`comment` 并非注释命令保留字,以英文分号 `;` 开头的行被视为单行注释。 + +## 语句内容 + +`;` 后面可以跟随注释内容,该命令本身不执行任何操作。 +详情请见[注释](../../webgal-script/base.md#注释)。 + +```webgal +; 这是一个注释 +``` + +任何命令语句的第一个 `;` (`\;` 除外) 后的内容被视为行内注释。行内注释不会改变该行的命令类型。 + +```webgal +changeFigure:character_a/normal.png -id=aaa; +setTransform:{"position":{"x":-500}} -target=aaa -duration=500; 给立绘 B 让位置 +changeFigure:character_b/normal.png -id=bbb -transform={"position":{"x":500}}; +``` diff --git a/src/script-reference/commands/end.md b/src/script-reference/commands/end.md new file mode 100644 index 000000000..a8a08923c --- /dev/null +++ b/src/script-reference/commands/end.md @@ -0,0 +1,10 @@ +# end + +结束当前场景并返回标题页。 + +## 语句内容 +不需要填写任何内容。 + +```webgal +end; +``` diff --git a/src/script-reference/commands/filmMode.md b/src/script-reference/commands/filmMode.md new file mode 100644 index 000000000..6d9ab61f9 --- /dev/null +++ b/src/script-reference/commands/filmMode.md @@ -0,0 +1,13 @@ +# filmMode + +开启和关闭电影模式的二合一命令。 + +## 语句内容 + +当不填写或填写 `none` 时,关闭电影模式。其他任何字符串均表示开启电影模式。 + +```webgal +filmMode:on; +角色A:真相只有一个; +filmMode:none; +``` diff --git a/src/script-reference/commands/getUserInput.md b/src/script-reference/commands/getUserInput.md new file mode 100644 index 000000000..ff09ef405 --- /dev/null +++ b/src/script-reference/commands/getUserInput.md @@ -0,0 +1,42 @@ +# getUserInput + +获取用户输入。 + +## 语句内容 + +填写变量名称,用户输入的值将保存在该变量中。 + +```webgal +角色B:真的是太感谢您了,能告诉我您的名字吗?; +getUserInput:player_name -title=您的名字 -buttonText=确认 -defaultValue=Bob; +角色B:{player_name},我记住了。; +``` + +## 参数 + +### title +- 字符串 + +设置输入框的标题。 + +```webgal +getUserInput:player_name -title=您的名字; +``` + +### buttonText +- 字符串 + +设置确认按钮文本。 + +```webgal +getUserInput:player_name -buttonText=确认; +``` + +### defaultValue +- 字符串 + +设置输入框的默认值。 + +```webgal +getUserInput:player_name -defaultValue=Bob; +``` diff --git a/src/script-reference/commands/global.md b/src/script-reference/commands/global.md new file mode 100644 index 000000000..16b8ef206 --- /dev/null +++ b/src/script-reference/commands/global.md @@ -0,0 +1,87 @@ +# (global) + +global 并非一个命令。此页面介绍的是所有命令均可使用的通用参数。 + +## 参数 + +### next +- 布尔值 + +当值为 `true` 时,在执行当前语句的同时,同步执行接下来的语句,直至找到 `next` 为 `false` 的语句为止。 + +```webgal +label:loop; +; +changeBg:bg.png -next; +changeFigure:1/open_eyes.png -next -id=aaa; +角色名:背景,角色与这段话同时出现; +; +changeBg:none -next; +changeFigure:none -next -id=aaa; +角色名:背景,角色同时退场; +; +jumpLabel:loop; +``` + +部分命令自带 `next` 参数,如 +- bgm +- pixiPerform +- pixiInit +- miniAvatar +- label +- setVar +- unlockCg +- unlockBgm +- filmMode +- playEffect +- setTransition +- applyStyle + +部分命令与 `next` 参数不兼容,例如在 `wait` 命令加 `next` 参数, 等待不会生效。 + +### when +- 字符串 + +书写条件表达式,仅当条件为 `true` 时,执行当前语句。 + +```webgal +label:start; +; +setVar:coin=10; +角色名:我现在有 {coin} 块钱。 +; +label:buy; +; +setVar:coin=coin-3 -when=coin>=3; +角色名:花 3 块钱买汽水,剩下 {coin} 块。 +; +角色名:没钱买 3 块钱的汽水了,只剩下 {coin} 块。 -when=coin<3; +jumpLabel:start -when=coin<3; +; +jumpLabel:buy; +``` + +### continue +- 布尔值 + +在这一句的演出结束后,自动执行下一句,即使玩家未开启自动播放。 + +```webgal +changeBg:bg.png -next; +changeFigure:1/open_eyes.png -transform={"position":{"x":-500}} -id=aaa -next; +changeFigure:2/open_eyes.png -transform={"position":{"x":500}} -id=bbb; +; +label:loop; +; +setTransform:{"position":{"x":500}} -target=aaa -continue; +setTransform:{"position":{"x":-500}} -target=bbb -continue; +setTransform:{"position":{"x":-500}} -target=aaa -continue; +setTransform:{"position":{"x":500}} -target=bbb -continue; +; +jumpLabel:loop; +``` + +部分命令自带 `continue` 参数,如 +- wait +- intro (`hold` 与 `userForward` 均为 `false` 时) +- playVideo diff --git a/src/script-reference/commands/intro.md b/src/script-reference/commands/intro.md new file mode 100644 index 000000000..4cb9d630e --- /dev/null +++ b/src/script-reference/commands/intro.md @@ -0,0 +1,99 @@ +# intro + +全屏文字命令。 + +## 语句内容 + +输入一段文字,这段文字会以全屏文字的形式显示在屏幕上。可以使用 `|` 来分割多行文字。 +详情请见[黑屏文字](../../webgal-script/dialogue.md#黑屏文字)。 + +```webgal +intro:这是第一行文字|这是第二行文字|这是第三行文字; +``` + +## 参数 + +### fontSize +- 字符串 + +设置字体大小,可用值有: +- `small` - 小号字体 +- `medium` - 中号字体 +- `large` - 大号字体 + +```webgal +intro:这是一段话 -fontSize=large; +``` + +### fontColor +- 字符串 +- 默认值: `rgba(0, 0, 0, 1)` + +设置字体颜色,格式如 `rgba(0,0,0,1)`,表示黑色,`rgba(255,255,255,1)` 表示白色。透明度范围为 0 到 1。 + +```webgal +intro:这是一段话 -fontColor=rgba(48, 135, 206, 1); +``` + +### backgroundColor +- 字符串 +- 默认值: `rgba(0, 0, 0, 1)` + +设置背景颜色,格式如 `rgba(0,0,0,1)`,表示黑色,`rgba(255,255,255,1)` 表示白色。透明度范围为 0 到 1。 + +```webgal +intro:这是一段话 -backgroundColor=rgba(22,22,22,0.8); +``` + +### backgroundImage +- 字符串 + +填写背景图像的路径,将其作为全屏文字的背景图像。若未设置此参数,则使用 `backgroundColor`。 + +```webgal +intro:这是一段话 -backgroundImage=bg.png; +``` + +### animation +- 字符串 + +设置全屏文字的显示方式,支持以下几种动画效果: +- `fadeIn`:透明度淡入,默认值 +- `slideIn`:滑入 +- `typingEffect`:打字机效果 +- `pixelateEffect`:模糊 +- `revealAnimation`:卷轴展开 + +```webgal +intro:这是第一行文字|这是第二行文字|这是第三行文字 -animation=slideIn; +``` + +### delay +- 数字 +- 单位:毫秒 + +设置每行文字的显示延迟时间。 + +```webgal +intro:这是第一行文字|这是第二行文字|这是第三行文字 -delay=1000; +``` + +### hold +- 布尔值 + +当值为 `true` 时,所有文字显示完毕后,不会自动执行下一句,直到玩家点击屏幕。 +当值为 `false` 时,所有文字显示完毕后,自动执行下一句,即使玩家未开启自动播放。 + +```webgal +intro:这是一段话 -hold; +``` + +### useForward +- 布尔值 + +当值为 `true` 时,需要用户手动点击屏幕,才会显示下一行文字,并设置 `hold` 为 `true`。 +当值为 `false` 时,自动显示下一行文字。 + +```webgal +intro:这是一段话 -useForward; +``` diff --git a/src/script-reference/commands/jumpLabel.md b/src/script-reference/commands/jumpLabel.md new file mode 100644 index 000000000..542f4d9f4 --- /dev/null +++ b/src/script-reference/commands/jumpLabel.md @@ -0,0 +1,22 @@ +# jumpLabel + +跳转到指定标签。 +详情请见[标签跳转](../../webgal-script/scenes.md#标签跳转)。 + +## 语句内容 + +填写要跳转的目标标签名称。 + +```webgal +label:think; +; +角色A:我记得她好像喜欢......; +choose:小熊玩偶:wrong|兔子玩偶:correct; +; +label:wrong; +角色A:好像不太对,再想想。; +jumpLabel:think; +; +label:correct; +角色A:对,是兔子玩偶。; +``` diff --git a/src/script-reference/commands/label.md b/src/script-reference/commands/label.md new file mode 100644 index 000000000..dc46fe1d2 --- /dev/null +++ b/src/script-reference/commands/label.md @@ -0,0 +1,12 @@ +# label + +设置标签。 +详情请见[标签跳转](../../webgal-script/scenes.md#标签跳转)。 + +## 语句内容 + +填写标签名称。该命令本身不执行任何操作,但可以配合 `choose` 和 `jumpLabel` 使用。 + +```webgal +label:myLabel; +``` diff --git a/src/script-reference/commands/miniAvatar.md b/src/script-reference/commands/miniAvatar.md new file mode 100644 index 000000000..ff3e539e8 --- /dev/null +++ b/src/script-reference/commands/miniAvatar.md @@ -0,0 +1,17 @@ +# miniAvatar + +显示、改变、隐藏对话框旁边的小头像的三合一命令。 + +## 语句内容 + +填写小头像图片的路径。当文件路径为空或为 `none` 时,表示隐藏小头像。 +详情请见[放置小头像](../../webgal-script/bg-and-figure.md#放置小头像)。 + +```webgal +miniAvatar:character_a/avatar.png; +角色A:这是角色 A 在说话; +miniAvatar:character_b/avatar.png; +角色B:这是角色 B 在说话; +miniAvatar:none; +:这是一段旁白; +``` diff --git a/src/script-reference/commands/pixiInit.md b/src/script-reference/commands/pixiInit.md new file mode 100644 index 000000000..b950f9db7 --- /dev/null +++ b/src/script-reference/commands/pixiInit.md @@ -0,0 +1,16 @@ +# pixiInit + +清除舞台特效,与初始化舞台特效的二合一命令。 + +## 语句内容 + +不需要填写任何内容。 +详情请见[特效](../../webgal-script/special-effect.md)。 + +```webgal +pixiInit; 初始化舞台特效 +pixi:rain; +说话者:下雨了。; +pixiInit; 清除所有舞台特效 +说话者:雨停了。; +``` diff --git a/src/script-reference/commands/pixiPerform.md b/src/script-reference/commands/pixiPerform.md new file mode 100644 index 000000000..1c600bc49 --- /dev/null +++ b/src/script-reference/commands/pixiPerform.md @@ -0,0 +1,31 @@ +# pixiPerform + +添加舞台特效。使用舞台特效前,需要先使用 `pixiInit` 命令进行初始化。 + +## 语句内容 + +填写舞台特效名称,将播放对应名称的舞台特效。 +详情请见[特效](../../webgal-script/special-effect.md)。 + +目前可用的舞台特效有: +- `cherryBlossoms`:樱花飘落 +- `rain`:下雨 +- `snow`:下雪 +- `heavySnow`:下大雪 + +```webgal +pixiInit; 初始化舞台特效 +pixiPerform:rain; +说话者:下雨了。; +pixiInit; 清除所有舞台特效 +说话者:雨停了。; +``` + +您可以叠加使用两种不同的舞台特效。 + +```webgal +pixiInit; +pixiPerform:rain; +pixiPerform:snow; +说话者:雨雪纷飞。; +``` diff --git a/src/script-reference/commands/playEffect.md b/src/script-reference/commands/playEffect.md new file mode 100644 index 000000000..41c161bd4 --- /dev/null +++ b/src/script-reference/commands/playEffect.md @@ -0,0 +1,34 @@ +# playEffect + +播放音效、替换音效、停止音效的三合一命令。 + +## 语句内容 + +填写音效文件的路径。当文件路径为空或为 `none` 时,表示停止播放音效。 +详情请见[播放效果音](../../webgal-script/audio.md#播放效果音)。 + +```webgal +; 如果没有音效存在,则此句表示播放音效。 +playEffect:rain.wav; +; 如果已有音效存在,则此句表示替换音效。 +playEffect:heavy_rain.wav; +; 如果填写 none 或者不填,则此句表示停止播放音效。 +playEffect:none; +``` + +## 参数 + +### id +- 字符串 + +为音效设置 id 后,音效可以循环播放。 +不同 id 的音效与无 id 的音效可以叠加播放。 + +```webgal +; 循环播放脚步声 +playEffect:footsteps.wav -id=footsteps; +; 循环播放雨声 +playEffect:rain.wav -id=rain; +; 播放一次雷声 +playEffect:thunder.wav; +``` diff --git a/src/script-reference/commands/playVideo.md b/src/script-reference/commands/playVideo.md new file mode 100644 index 000000000..f1e620ab7 --- /dev/null +++ b/src/script-reference/commands/playVideo.md @@ -0,0 +1,24 @@ +# playVideo + +播放视频。 + +## 语句内容 + +填写视频文件的路径,全屏播放该视频,图层高于立绘和背景,并临时静音对话语音和背景音乐。 +详情请见[视频](../../webgal-script/video.md)。 + +```webgal +playVideo:video.mp4; +``` + +## 参数 + +### skipOff +- 布尔值 + +当值为 `true` 时,不允许跳过视频。 +当值为 `false` 或不填写该参数时,双击可跳过视频。 + +```webgal +playVideo:video.mp4 -skipOff; +``` diff --git a/src/script-reference/commands/say.md b/src/script-reference/commands/say.md new file mode 100644 index 000000000..e21276ad4 --- /dev/null +++ b/src/script-reference/commands/say.md @@ -0,0 +1,153 @@ +# say + +对话命令。任何识别不了的命令,都将尝试作为对话命令执行。 + +## 语句内容 + +填写一句话,这句话将出现在对话框中。可以使用 `|` 来分割多行文字。 +详情请见[基础](../../webgal-script/base.md)与[对话](../../webgal-script/dialogue)。 + +```webgal +说话人:你好,世界!; +``` + +以下情况对话框不会出现: +- 语句内容与角色名均为空 +- 用 `setTextbox` 命令隐藏了对话框 +- 开启了 __隐藏所有 UI__ + +## 参数 + +### notend +- 布尔值 + +当值为 `true` 时,显示完所有文字后,立刻执行下一条命令,即使玩家未开启自动播放。 + +```webgal +changeFigure:1/open_eyes.png -next; +角色A:这到底是在干什么啊...... -notend; +changeFigure:1/closed_eyes.png -next; +没眼看了! -concat; +``` + +### concat +- 布尔值 + +当值为 `true` 时,不会清空对话框内已有的文字,而是在此基础上,让新文字接续在后面。 + +```webgal +changeFigure:1/open_eyes.png -next; +角色A:这到底是在干什么啊...... -notend; +changeFigure:1/closed_eyes.png -next; +没眼看了! -concat; +``` + +### speaker +- 字符串 + +填写说话者的名称,该名称将出现在对话框的说话者栏中。 +若未填写此参数,则对话框将继续使用上一次的说话者名称。 + +```webgal +say:你好,世界! -speaker=角色A; +; 若没有 speaker 参数,角色名继续使用上一次的值 +say:世界,你好!; +``` + +WebGAL 支持说话者的简化写法。 +若句首到第一个英文冒号之间的字符不是命令,那么将其作为说话者名称。 +若整句没有英文冒号,即找不到说话者名称,则继续使用上一次的说话者名称。 + +```webgal +角色A:你好,世界!; +; 说话者仍然为角色A +世界,你好!; +``` + +### clear +- 布尔值 + +当值为 `true` 时,将清除说话者,此时对话框的说话者栏不会显示,通常可用于旁白。 + +```webgal +say:这是一句话。 -speaker=角色A; +say:这是一个旁白。 -clear; +say:这是一句话。 -speaker=角色B; +``` + +WebGAL 支持旁白的简化写法。当句首到第一个英文冒号之间没有一个字符,那么将这句话作为旁白。 + +```webgal +角色A:这是一句话。; +:这是一句旁白。; +角色B:这是一句话。; +``` + +### vocal +- 字符串 + +填写声音文件的路径,说话时将播放该声音文件。 + +```webgal +角色A:你好,世界! -vocal=hello_world.wav; +``` + +WebGAL 支持声音文件的简化写法。 + +```webgal +角色A:你好,世界! -hello_world.wav; +``` + +### fontSize +- 字符串 + +设置字体大小,可用值有: +- `small` - 小号字体 +- `medium` - 中号字体 +- `large` - 大号字体 +- `default` - 默认字体大小,即设置里指定的字体大小 + +当此值被设置后,会传递到之后的对话,直至被再次设置。 + +```webgal +角色A:你好,世界! -fontSize=small; +角色A:你好,世界!; 依然是小字体 +角色A:你好,世界! -fontSize=large; +角色A:你好,世界! -fontSize=default; +``` + +### left +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动左侧立绘张嘴说话。 + +```webgal +角色A:你好,世界! -left; +``` + +### right +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动右侧立绘张嘴说话。 + +```webgal +角色A:你好,世界! -right; +``` + +### center +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动中间立绘张嘴说话。 + +```webgal +角色A:你好,世界! -center; +``` + +### figureId +- 字符串 + +填写立绘的 id,WebGAL 将尝试驱动对应 id 的立绘张嘴说话。 + +```webgal +角色A:你好,世界! -figureId=aaa; +``` diff --git a/src/script-reference/commands/setAnimation.md b/src/script-reference/commands/setAnimation.md new file mode 100644 index 000000000..7bb8a423d --- /dev/null +++ b/src/script-reference/commands/setAnimation.md @@ -0,0 +1,42 @@ +# setAnimation + +设置动画。 + +## 语句内容 + +填写自定义动画名称,驱动指定目标的舞台对象执行多段动画。 +详情请见[自定义动画](../../webgal-script/animation.md#自定义动画)。 + +:::info +如果您想直接在脚本里设置多段动画,请使用 [setTempAnimation](setTempAnimation.md) 命令。 +如果您只想设置单段动画,请使用 [setTransform](setTransform.md) 命令。 +::: + +```webgal +setAnimation:shake -target=aaa; +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setAnimation:shake -target=aaa; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setAnimation:shake -target=aaa -writeDefault; +``` + + +```webgal +; 假设这是一个特别长的动画 +setAnimation:shake -target=aaa -keep; +角色A: 第一句话; +角色A: 第二句话; +角色A: 第三句话; +; 这会打断 aaa 的跨语句动画,并播放新动画 +setAnimation:rotate -target=aaa -keep; +``` diff --git a/src/script-reference/commands/setComplexAnimation.md b/src/script-reference/commands/setComplexAnimation.md new file mode 100644 index 000000000..42f96091a --- /dev/null +++ b/src/script-reference/commands/setComplexAnimation.md @@ -0,0 +1,28 @@ +# setComplexAnimation + +设置复杂动画。 + +## 语句内容 + +填写复杂动画的名称。 + +目前 WebGAL 提供的复杂动画有: +- `universalSoftIn`:通用透明度淡入 +- `universalSoftOff`:通用透明度淡出 + +```webgal +setComplexAnimation:universalSoftIn -target=aaa -duration=1000; +``` + +## 参数 + + +```webgal +setComplexAnimation:universalSoftIn -target=fig-center -duration=1000; +``` + + +作用于复杂动画的持续时间。 +```webgal +setComplexAnimation:universalSoftIn -target=fig-center -duration=1000; +``` diff --git a/src/script-reference/commands/setTempAnimation.md b/src/script-reference/commands/setTempAnimation.md new file mode 100644 index 000000000..4ff3bf106 --- /dev/null +++ b/src/script-reference/commands/setTempAnimation.md @@ -0,0 +1,44 @@ +# setTempAnimation + +设置临时动画。 + +## 语句内容 + +与 `setAnimation` 读取动画文件不同,`setTempAnimation` 允许用户直接在代码里定义多段动画。 +语句内容格式为动画文件的单行形式,即 `[{},{},{}]` 。 + +:::info +如果您想复用动画,请使用 [setAnimation](setAnimation.md) 命令。 +如果您只想设置单段动画,请使用 [setTransform](setTransform.md) 命令。 +::: + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +; 闪光弹动画 +setTempAnimation:[{"duration":0},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":200},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":2500}] -target=aaa; +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTempAnimation:[{"duration":0},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":200},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":2500}] -target=aaa; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTempAnimation:[{"duration":0},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":200},{"brightness":2,"contrast":0,"duration":200,"ease":"circIn"},{"brightness":1,"contrast":1,"duration":2500}] -target=aaa -writeDefault; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTempAnimation:[{"duration":0},{"scale":{"x":2,"y":2},"duration":10000}] -target=aaa -keep -next; +角色A: 第一句话; +角色A: 第二句话; +角色A: 第三句话; +; 这会打断 aaa 的跨语句动画,并播放新动画 +setTempAnimation:[{"duration":0},{"scale":{"x":1,"y":1},"duration":10000}] -target=aaa -keep -next; +``` diff --git a/src/script-reference/commands/setTextbox.md b/src/script-reference/commands/setTextbox.md new file mode 100644 index 000000000..2dd976665 --- /dev/null +++ b/src/script-reference/commands/setTextbox.md @@ -0,0 +1,23 @@ +# setTextbox + +显示和隐藏文本框的二合一命令。 + +## 语句内容 + +填写 `hide` 时,隐藏对话框,其他任何字符串均表示显示对话框。 + +::: info +用 `setTextbox` 隐藏对话框后,若后续没有其他 `setTextbox` 命令显示对话框,则对话框将一直保持隐藏状态。 +::: + +如果用 `setTextbox` 显示对话框,但是对话框仍然没有出现,可能是因为以下情况: +- 说话内容与角色名均为空 +- 开启了 __隐藏所有 UI__ + +```webgal +角色A:带你去一个地方。; +setTextbox:hide; +changeBg:shop.png; +setTextbox:show; +角色A:我们到了。; +``` diff --git a/src/script-reference/commands/setTransform.md b/src/script-reference/commands/setTransform.md new file mode 100644 index 000000000..faf45101e --- /dev/null +++ b/src/script-reference/commands/setTransform.md @@ -0,0 +1,50 @@ +# setTransform + +设置变换与效果。 + +## 语句内容 + +填写[变换与效果](../others/transform-reference.md)的单行 JSON 字符串。 + +:::info +此命令只生成一段动画,如果您需要设置多段动画,请使用 [setAnimation](setAnimation.md) 或 [setTempAnimation](setTempAnimation.md) 命令。 +::: + +```webgal +changeFigure:character_a/normal.png -id=aaa; +; 向左移动 +setTransform:{"position":{"x":-500},"saturation":0.8} -target=aaa -duration=500; +; 降低亮度 +setTransform:{"brightness":0.5,"contrast":1.2} -target=aaa -duration=500; +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500 -writeDefault; +``` + + +```webgal +; 假设这是一个特别长的动画 +setTransform:{"scale":{"x":2,"y":2}} -target=aaa -duration=10000; +角色A: 第一句话; +角色A: 第二句话; +角色A: 第三句话; +; 这会打断 aaa 的跨语句动画,并播放新动画 +setTransform:{"scale":{"x":1,"y":1}} -target=aaa -duration=10000; +``` diff --git a/src/script-reference/commands/setTransition.md b/src/script-reference/commands/setTransition.md new file mode 100644 index 000000000..5fedc2bd2 --- /dev/null +++ b/src/script-reference/commands/setTransition.md @@ -0,0 +1,42 @@ +# setTransition + +设置舞台对象的入场或出场动画。 + +## 语句内容 + +不需要填写任何语句内容。 +详情请见[设置进出场效果](../../webgal-script/animation.md#设置进出场效果)。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -next; +setTransition: -target=aaa -enter=enter-from-left; +角色A: 你好! +setTransition: -target=aaa -exit=exit-to-right; +changeFigure:none -id=aaa -next; +角色A: 再见! +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -id=aaa -next; +setTransition: -target=aaa -enter=enter-from-left; +角色A: 你好! +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa -next; +setTransition: -target=aaa -enter=enter-from-left; +角色A: 你好! +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa -next; +角色A: 你好! +setTransition: -target=aaa -exit=exit-to-right; +changeFigure:none -id=aaa -next; +角色A: 再见! +``` diff --git a/src/script-reference/commands/setVar.md b/src/script-reference/commands/setVar.md new file mode 100644 index 000000000..3e8371ee0 --- /dev/null +++ b/src/script-reference/commands/setVar.md @@ -0,0 +1,66 @@ +# setVar + +新增变量、修改变量的二合一命令。 + +## 语句内容 + +格式如 `setVar:变量名=值;` 或 `setVar:变量名=表达式;`。 +详情请见[变量](../../webgal-script/variable)。 + +支持的值类型包括: +- 数字(如 15,5e3,-5.5) +- 布尔值(`true` 或 `false`) +- 字符串 + +WebGAL 会尝试将无法识别的值类型,转换为字符串。 + +```webgal +setVar:char_b_fav=15; 角色 B 初始好感度 +角色B:呐呐,看不看得出来我今天哪里不一样?; +choose:缎带:add|你变胖了:minus; +; +label:add; +角色A:是换了缎带吧。; +setVar:char_b_fav=char_b_fav+10; 角色 B 好感度 +10; +角色B:答对了,怎么样,你觉得好看吗?; +角色A:嗯,很适合你。; +jumpLabel:go_out; +; +label:minus; +角色A:你变胖了。; +setVar:char_b_fav=char_b_fav-10; 角色 B 好感度 -10; +角色B:你这人好无趣唉......; +; +label:go_out; +角色A:对了,今天晚上你有空吗?; +; +角色B:今晚没有安排,怎么了? -when=char_b_fav>10; +changeScene:chapter_01/part_02.txt -when=char_b_fav>10; +; +角色B:没有。不好意思我先走了。; +:角色 B 离开了。; +; +``` + +## 参数 + +### global +- 布尔值 + +当值为 `true` 时,表示设置一个长效(全局)变量。长效变量在整个游戏中生效,除非用户清除全部数据。 +当值为 `false` 时,表示设置一个普通变量。普通变量只在当前场景中生效,存档后会被保存,读档后恢复。 + +```webgal +; 假设这是新游戏的开头 +jumpLabel:another_life -when=multiple_playthroughs; +; +setVar:multiple_playthroughs=false -global; 是否为多周目游戏 +changeScene:chapter_01/part_01.txt; +; +label:another_life; +神秘的声音:如果有机会,你会选择过另一种人生吗?; +changeScene:chapter_01/part_01_extra.txt; +; +; 假设这是最后一章的结束部分 +setVar:multiple_playthroughs=true -global; 设置为多周目游戏 +``` diff --git a/src/script-reference/commands/showVars.md b/src/script-reference/commands/showVars.md new file mode 100644 index 000000000..e45de6d2c --- /dev/null +++ b/src/script-reference/commands/showVars.md @@ -0,0 +1,11 @@ +# showVars + +在对话框中,显示所有本地变量与全局变量的值。 + +## 语句内容 + +不需要填写任何内容。 + +```webgal +showVars; +``` diff --git a/src/script-reference/commands/unlockBgm.md b/src/script-reference/commands/unlockBgm.md new file mode 100644 index 000000000..602986818 --- /dev/null +++ b/src/script-reference/commands/unlockBgm.md @@ -0,0 +1,27 @@ +# unlockBgm + +将音乐收录进 BGM 鉴赏。 + +## 语句内容 + +填写音乐的路径。 + +```webgal +unlockBgm:school/morning.mp3 -name=学校的早晨; +``` + +## 参数 + +### name + +若不填写 `name`,则以音乐的路径作为名称。 + +```webgal +unlockBgm:school/morning.mp3 -name=学校的早晨; +``` + +### series + +```webgal +unlockBgm:school/morning.mp3 -name=早晨 -series=学校; +``` diff --git a/src/script-reference/commands/unlockCg.md b/src/script-reference/commands/unlockCg.md new file mode 100644 index 000000000..c83251d4e --- /dev/null +++ b/src/script-reference/commands/unlockCg.md @@ -0,0 +1,27 @@ +# unlockCg + +将图片收录进 CG 鉴赏。 + +## 语句内容 + +填写图片的路径。 + +```webgal +unlockCg:chapter_03/date.png -name=第一次约会; +``` + +## 参数 + +### name + +若不填写 `name`,则以图片的路径作为名称。 + +```webgal +unlockCg:chapter_03/date.png -name=第一次约会; +``` + +### series + +```webgal +unlockCg:chapter_03/date.png -name=第一次约会 -series=角色B; +``` diff --git a/src/script-reference/commands/wait.md b/src/script-reference/commands/wait.md new file mode 100644 index 000000000..88d70d5e0 --- /dev/null +++ b/src/script-reference/commands/wait.md @@ -0,0 +1,15 @@ +# wait + +等待一段时间。 + +## 语句内容 + +填写一个数字,作为等待时间,单位为毫秒。 +有时出于演出效果的需要,可能需要等待一段时间,再执行下一句。 + +```webgal +角色A:让我想想; +角色A:......; +wait:5000; 等待 5 秒 +角色A:想不出来,算了。; +``` diff --git a/src/script-reference/others/transform-reference.md b/src/script-reference/others/transform-reference.md new file mode 100644 index 000000000..bdfb283ac --- /dev/null +++ b/src/script-reference/others/transform-reference.md @@ -0,0 +1,370 @@ +# 变换效果参考 + +`transform` 是舞台对象的变换效果属性,包含位置、旋转、缩放与各种滤镜属性。其格式如下面例子所示: + +```json +{"position":{"x":0,"y":0},"rotation":0,"scale":{"x":1,"y":1},"alpha":1,"blur":0,"colorRed":255,"colorGreen":255,"colorBlue":255} +``` + +通常不需要完整书写所有的属性,您可以只写入需要修改的属性,未修改的属性将根据具体情况,继承现有值或者使用默认值。 +```webgal +setTransform:{"position":{"x":100},"rotation":45} -target=aaa -duration=500; +; 此句会继承已有的变换效果,并在此基础上修改了模糊滤镜的值 +setTransform:{"blur":20} -target=aaa -duration=500; +; 此句会将除了 saturation 以外的所有属性都重置为默认值 +setTransform:{"saturation":0} -target=aaa -duration=500 -writeDefault; +``` + +对于滤镜属性,仅当该滤镜的所有值都为默认值时,该滤镜才会彻底关闭。否则该滤镜会持续存在,直至该对象退场,这可能会导致一些不必要的性能消耗,因此推荐开发者在必要时,显式修改相关属性为默认值以关闭滤镜。 +```webgal +changeBg:bg.png -transform={"brightness":0.5,"blur":10} -next; +changeFigure:1/open_eyes.png -id=aaa; +; +; 启用颜色调整、倒角、泛光滤镜,并调整参数 +setTempAnimation:[{"bloomBlur":20,"bloomThreshold":0.8,"duration":0},{"brightness":0.5,"bevel":1,"bevelThickness":20,"bevelRotation":45,"bloom":1,"bloomBlur":20,"bloomThreshold":0.8,"duration":500}] -target=aaa; +; 关掉部分泛光效果,但由于 bloomBlur bloomThreshold 未设置到默认值,泛光滤镜仍然会存在 +setTransform:{"bloom":0} -target=aaa -duration=500; +; 泛光滤镜的所有参数被设置到默认值,泛光滤镜被关闭 +setTransform:{"bloomBlur":0,"bloomThreshold":0} -target=aaa -duration=500; +``` + +目前滤镜以如下顺序应用到图像上 +- 反射滤镜 +- 径向渐变透明滤镜 +- 冲击波滤镜 +- 模糊滤镜 +- RGB 分离滤镜 +- 点状滤镜 +- 故障滤镜 +- 老电影滤镜 +- 泛光滤镜 +- 光辉滤镜 +- 倒角滤镜 +- 颜色调整滤镜 +- 原始图像 + +## 基础变换 + +### position +- 默认值:`{"x":0,"y":0}` +- 单位:画布像素 + +位置。修改其 x 和 y 属性可以改变对象在舞台中的坐标。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"position":{"x":500,"y":-50}}; +setTransform:{"position":{"x":-200,"y":50}} -target=aaa -duration=500; +``` + +### rotation +- 默认值:0 +- 单位:弧度 + +旋转。改变对象的旋转弧度,以顺时针为正方向。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"rotation":-3.14}; +setTransform:{"rotation":1.57} -target=aaa -duration=500; +``` + +### scale +- 默认值:`{"x":1,"y":1}` + +缩放。修改其 x 和 y 属性可以改变对象的缩放比例。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"scale":{"x":0.5,"y":0.5}}; +setTransform:{"scale":{"x":2,"y":2}} -target=aaa -duration=500; +``` + +## 基础效果 + +### alpha +- 默认值:1 +- 范围:0 到 1 (完全透明 -> 完全不透明) + +透明度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"alpha":0.8}; +setTransform:{"alpha":0.2} -target=aaa -duration=500; +``` + +### blur +- 默认值:0 +- 范围:0 到正无穷 +- 单位:画布像素 + +模糊。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"blur":10}; +setTransform:{"blur":30} -target=aaa -duration=500; +``` + +## 颜色调整滤镜 + +### brightness +- 默认值:1 + +亮度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"brightness":0.3}; +setTransform:{"brightness":1.5} -target=aaa -duration=500; +``` + +### contrast +- 默认值:1 + +对比度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"contrast":0.3}; +setTransform:{"contrast":2} -target=aaa -duration=500; +``` + +### saturation +- 默认值:1 + +饱和度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"saturation":0.3}; +setTransform:{"saturation":2} -target=aaa -duration=500; +``` + +### gamma +- 默认值:1 + +伽马值。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"gamma":0.5}; +setTransform:{"gamma":1.2} -target=aaa -duration=500; +``` + +### colorRed +- 默认值:255 +- 范围:0 到 255 + +色调的红色分量。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"colorRed":128}; +setTransform:{"colorRed":64} -target=aaa -duration=500; +``` + +### colorGreen +- 默认值:255 +- 范围:0 到 255 + +色调的绿色分量。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"colorGreen":128}; +setTransform:{"colorGreen":64} -target=aaa -duration=500; +``` + +### colorBlue +- 默认值:255 +- 范围:0 到 255 + +色调的蓝色分量。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"colorBlue":128}; +setTransform:{"colorBlue":64} -target=aaa -duration=500; +``` + +## 泛光滤镜 + +### bloom +- 默认值:0 +- 范围:0 到正无穷 + +泛光的强度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bloom":0.5,"bloomBlur":10}; +setTransform:{"bloom":1,"bloomBlur":10} -target=aaa -duration=500; +``` + +### bloomBrightness +- 默认值:1 + +泛光的亮度。与颜色调整滤镜的 `brightness` 的区别在于,此参数不会影响泛光叠加层的亮度。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bloom":1,"bloomBrightness":0.5,"bloomBlur":10}; +setTransform:{"bloom":1,"bloomBrightness":1,"bloomBlur":10} -target=aaa -duration=500; +``` + +### bloomBlur +- 默认值:0 +- 范围:0 到正无穷 +- 单位:画布像素 + +泛光的模糊程度。若 `bloom` 和 `bloomBrightness` 均为默认值,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bloom":1,"bloomBlur":0}; +setTransform:{"bloom":1,"bloomBlur":30} -target=aaa -duration=500; +``` + +### bloomThreshold +- 默认值:0 +- 范围:0 到 1 (全泛光 => 最亮的部分泛光) + +泛光的阈值。当数值调高时,仅图像中较亮的部分会产生泛光效果。若 `bloom` 和 `bloomBrightness` 均为默认值,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bloom":1,"bloomBlur":10,"bloomThreshold":0}; +setTransform:{"bloom":1,"bloomBlur":10,"bloomThreshold":0.8} -target=aaa -duration=500; +``` + +## 倒角滤镜 + +### bevel +- 默认值:0 +- 范围:0 到 1 (完全透明 => 完全不透明) + +倒角的透明度。如果 `bevelThickness` 为 0,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bevel":0.5,"bevelThickness":20}; +setTransform:{"bevel":1,"bevelThickness":20} -target=aaa -duration=500; +``` + +### bevelThickness +- 默认值:0 +- 范围:0 到正无穷 +- 单位:画布像素 + +倒角的厚度。如果 `bevel` 为 0,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bevel":1,"bevelThickness":20}; +setTransform:{"bevel":1,"bevelThickness":30} -target=aaa -duration=500; +``` + +### bevelRed +- 默认值:255 +- 范围:0 到 255 + +倒角颜色的红色分量。如果 `bevel` 或 `bevelThickness` 为默认值,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bevel":1,"bevelThickness":20,"bevelRed":128}; +setTransform:{"bevel":1,"bevelThickness":20,"bevelRed":64} -target=aaa -duration=500; +``` + +### bevelGreen +- 默认值:255 +- 范围:0 到 255。 + +倒角颜色的绿色分量。如果 `bevel` 或 `bevelThickness` 为默认值,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bevel":1,"bevelThickness":20,"bevelGreen":128}; +setTransform:{"bevel":1,"bevelThickness":20,"bevelGreen":64} -target=aaa -duration=500; +``` + +### bevelBlue +- 默认值:255 +- 范围:0 到 255 + +倒角颜色的蓝色分量。如果 `bevel` 或 `bevelThickness` 为默认值,单独调整此属性不会有任何视觉上的区别。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"bevel":1,"bevelThickness":20,"bevelBlue":128}; +setTransform:{"bevel":1,"bevelThickness":20,"bevelBlue":64} -target=aaa -duration=500; +``` + +## 其他滤镜 + +### oldFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +老电影滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"oldFilm":1}; +setTransform:{"oldFilm":0} -target=aaa -duration=500; +``` + +### dotFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +点状滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"dotFilm":1}; +setTransform:{"dotFilm":0} -target=aaa -duration=500; +``` + +### rgbFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +RGB 分离滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"rgbFilm":1}; +setTransform:{"rgbFilm":0} -target=aaa -duration=500; +``` + +### glitchFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +故障滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"glitchFilm":1}; +setTransform:{"glitchFilm":0} -target=aaa -duration=500; +``` + +### godrayFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +光辉滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"godrayFilm":1}; +setTransform:{"godrayFilm":0} -target=aaa -duration=500; +``` + +### reflectionFilm +- 默认值:0 +- 范围:0 到 1 (关闭 => 开启) + +反射滤镜的开关。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"reflectionFilm":1}; +setTransform:{"reflectionFilm":0} -target=aaa -duration=500; +``` + +### shockwave +- 默认值:0 + +冲击波的相位。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"shockwave":0}; +setTransform:{"shockwave":1} -target=aaa -duration=500; +``` + +### radiusAlpha +- 默认值:0 + +径向渐变透明的半径。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -transform={"radiusAlpha":0.2}; +setTransform:{"radiusAlpha":1.5} -target=aaa -duration=500; +```