mirror of
https://github.com/smogon/sprites.git
synced 2026-07-11 23:42:12 -05:00
deploy: refactor fs encode/decode
This commit is contained in:
parent
5737d672a3
commit
4a85087df6
|
|
@ -39,30 +39,26 @@ function addPair(src, dst) {
|
|||
|
||||
const ENV = {
|
||||
toPSID(dst) {
|
||||
const parsed = pathlib.parse(dst);
|
||||
delete parsed.base;
|
||||
parsed.name = util.toPSID(util.decode(parsed.name));
|
||||
const parsed = util.parse(dst);
|
||||
parsed.name = util.toPSID(parsed.data[0]);
|
||||
return pathlib.format(parsed);
|
||||
},
|
||||
|
||||
toPSSpriteID(dst) {
|
||||
const parsed = pathlib.parse(dst);
|
||||
delete parsed.base;
|
||||
parsed.name = util.toPSSpriteID(util.decode(parsed.name));
|
||||
const parsed = util.parse(dst);
|
||||
parsed.name = util.toPSSpriteID(parsed.data);
|
||||
return pathlib.format(parsed);
|
||||
},
|
||||
|
||||
toSmogonAlias(dst) {
|
||||
const parsed = pathlib.parse(dst);
|
||||
delete parsed.base;
|
||||
parsed.name = util.toSmogonAlias(util.decode(parsed.name));
|
||||
const parsed = util.parse(dst);
|
||||
parsed.name = util.toSmogonAlias(parsed.data[0]);
|
||||
return pathlib.format(parsed);
|
||||
},
|
||||
|
||||
toSmogonSpriteAlias(dst) {
|
||||
const parsed = pathlib.parse(dst);
|
||||
delete parsed.base;
|
||||
parsed.name = util.toSmogonSpriteAlias(util.decode(parsed.name));
|
||||
const parsed = util.parse(dst);
|
||||
parsed.name = util.toSmogonSpriteAlias(parsed.data);
|
||||
return pathlib.format(parsed);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,49 @@
|
|||
|
||||
export function decode(s) {
|
||||
return s.replace(/__(....)/g, (_, m) => String.fromCharCode(parseInt(m, 16))).replace("_", " ");
|
||||
import pathlib from 'path';
|
||||
|
||||
export function decodeComponent(s) {
|
||||
return s
|
||||
.replace(/([^_])_([^_])/g, "$1 $2")
|
||||
.replace(/~/g, "-")
|
||||
// Must occur last, or escaped ~/_ will be transformed
|
||||
.replace(/__(....)/g, (_, m) => String.fromCharCode(parseInt(m, 16)));
|
||||
}
|
||||
|
||||
export function decomposeName(name) {
|
||||
const [num, formeNum, base, forme=null] = name.split("-").map(s => s.replace(/~/g, "-"));
|
||||
export function decode(s) {
|
||||
return s.split("-").map(c => decodeComponent(c));
|
||||
}
|
||||
|
||||
export function parse(s) {
|
||||
const {dir, root, name, ext} = pathlib.parse(s);
|
||||
return {
|
||||
dir,
|
||||
root,
|
||||
data: decode(name),
|
||||
ext
|
||||
};
|
||||
}
|
||||
|
||||
export function encodeComponent(s) {
|
||||
return s
|
||||
.replace(/[^0-9a-zA-Z-. ]/g, c => '__' + c.charCodeAt(0).toString(16).padStart(4, "0"))
|
||||
.replace(" ", "_")
|
||||
.replace("-", "~");
|
||||
}
|
||||
|
||||
export function encode(l) {
|
||||
return l.map(c => encodeComponent(c)).join("-");
|
||||
}
|
||||
|
||||
export function format({dir, root, data, ext}) {
|
||||
return pathlib.format({
|
||||
dir,
|
||||
root,
|
||||
name: encode(data),
|
||||
ext
|
||||
});
|
||||
}
|
||||
|
||||
export function parsePokemonFilename([num, formeNum, base, forme=null]) {
|
||||
return {num: parseInt(num, 10), formeNum: parseInt(formeNum, 10), base, forme};
|
||||
}
|
||||
|
||||
|
|
@ -12,8 +51,8 @@ export function toPSID(name) {
|
|||
return name.toLowerCase().replace(/[^a-z0-9]+/g, '');
|
||||
}
|
||||
|
||||
export function toPSSpriteID(name) {
|
||||
const info = decomposeName(name);
|
||||
export function toPSSpriteID(data) {
|
||||
const info = parsePokemonFilename(data);
|
||||
let result = toPSID(info.base);
|
||||
if (info.forme !== null) {
|
||||
if (info.forme === 'Female') {
|
||||
|
|
@ -30,8 +69,8 @@ export function toSmogonAlias(name) {
|
|||
replace(/[^a-z0-9-]+/g, '');
|
||||
}
|
||||
|
||||
export function toSmogonSpriteAlias(name) {
|
||||
const info = decomposeName(name);
|
||||
export function toSmogonSpriteAlias(data) {
|
||||
const info = parsePokemonFilename(data);
|
||||
let result = toSmogonAlias(info.base);
|
||||
if (info.forme !== null) {
|
||||
result += '-' + toSmogonAlias(info.forme);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user