plist2
Version:
Converts between .tmLanguage(.plist), .json, .cson and .yaml formats
136 lines (134 loc) • 4.29 kB
JavaScript
/* eslint-disable */
/*
dester builds:
plist2js.ts
*/
import { regexp, REG_CRLF, createArray, __FALSE__, __TRUE__, __DATA__, __DATE__, __REAL__, __INTEGER__, __STRING__, __KEY__, __DICT__, createObject, __ARRAY__, __EMPTY__, keys, __COMMENTS_KEY__, isArray, __BINARY64_KEY__ } from '../lib';
/* filename: plist2js.ts
timestamp: 2024-12-13T15:18:10.475Z */
// /^\s*[\r\n\u2028\u2029]\s*|\s*[\r\n\u2028\u2029]\s*$/g
var reg1 = regexp(['^\\s*', REG_CRLF, '\\s*|\\s*', REG_CRLF, '\\s*$'], 'g');
var normalizeValue = v => v.replace(reg1, '').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'");
var plist2js = source => {
var plist = createArray();
var key = __EMPTY__;
var tag = __EMPTY__;
var content = __EMPTY__;
// prettier-ignore
var clear = () => {
tag = content = '';
};
var ENV = plist;
var superSet = value => {
if (isArray(ENV)) ENV.push(value);else ENV[key] = value, key = '';
};
var __env__ = [];
var setEnv = _type => {
if (_type === null) {
__env__.length && __env__.pop();
ENV = __env__[__env__.length - 1];
} else superSet(_type), __env__.push(ENV = _type);
};
var initTag = (_slash, _tag, _cb) => {
if (_slash) tag === _tag && _cb();else !tag && (tag = _tag);
};
var saveComment = _comment => {
_comment = _comment.slice(4, -3);
var __comments__ = ENV[__COMMENTS_KEY__];
var id = isArray(ENV) ? ENV.length : key;
if (!(id in __comments__)) __comments__[id] = [_comment];else __comments__[id].push(_comment);
};
var saveKey = () => {
key = normalizeValue(content), clear();
if (__EMPTY__ in ENV[__COMMENTS_KEY__]) {
ENV[__COMMENTS_KEY__][key] = ENV[__COMMENTS_KEY__][__EMPTY__];
delete ENV[__COMMENTS_KEY__][__EMPTY__];
}
};
// prettier-ignore
var saveString = () => {
superSet(normalizeValue(content)), clear();
};
// prettier-ignore
var saveInteger = () => {
superSet(parseInt(content)), clear();
};
// prettier-ignore
var saveReal = () => {
superSet(parseFloat(content)), clear();
};
// prettier-ignore
var saveDate = () => {
superSet(new Date(content.trim())), clear();
};
// prettier-ignore
var saveData = () => {
superSet({
[__BINARY64_KEY__]: content.trim()
// toJSON(): string { return jsonStringify(this[__BINARY64_KEY__]) }
}), clear();
};
// prettier-ignore
var saveBoolean = bool => {
!tag && superSet(bool);
};
source.replace(/(<!--.*?-->)|(?:<)(\/)?(array|dict|key|string|integer|real|dat(?:e|a)|true|false)(?:.*?>)|([^<]+)/gi, (_, _comment, _slash, _tag, _content, _index) => {
switch (false) {
case !_comment:
saveComment(_comment);
break;
case !_tag:
_tag = _tag.toLowerCase();
switch (_tag) {
case __ARRAY__:
setEnv(_slash ? null : createArray());
break;
case __DICT__:
setEnv(_slash ? null : createObject());
break;
case __KEY__:
initTag(_slash, __KEY__, saveKey);
break;
case __STRING__:
initTag(_slash, __STRING__, saveString);
break;
case __INTEGER__:
initTag(_slash, __STRING__, saveInteger);
break;
case __REAL__:
initTag(_slash, __REAL__, saveReal);
break;
case __DATE__:
initTag(_slash, __DATE__, saveDate);
break;
case __DATA__:
initTag(_slash, __DATA__, saveData);
break;
case __TRUE__:
saveBoolean(true);
break;
case __FALSE__:
saveBoolean(false);
break;
}
break;
case !_content:
tag && (content += _content);
break;
}
return __EMPTY__;
});
var res = plist;
if (plist.length === 1) {
res = plist[0];
keys(plist[__COMMENTS_KEY__]).forEach(key => {
if (!res[__COMMENTS_KEY__][key]) {
res[__COMMENTS_KEY__][key] = plist[__COMMENTS_KEY__][key];
} else {
res[__COMMENTS_KEY__][key][key !== __EMPTY__ ? 'unshift' : 'push'](...plist[__COMMENTS_KEY__][key]);
}
});
}
return res;
};
export { plist2js as default };