plist2
Version:
Converts between .tmLanguage(.plist), .json, .cson and .yaml formats
141 lines (138 loc) • 4.34 kB
JavaScript
/* eslint-disable */
/*
dester builds:
plist2js.ts
*/
;
Object.defineProperty(exports, '__esModule', {
value: true
});
var lib = require('../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 = lib.regexp(['^\\s*', lib.REG_CRLF, '\\s*|\\s*', lib.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 = lib.createArray();
var key = lib.__EMPTY__;
var tag = lib.__EMPTY__;
var content = lib.__EMPTY__;
// prettier-ignore
var clear = () => {
tag = content = '';
};
var ENV = plist;
var superSet = value => {
if (lib.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[lib.__COMMENTS_KEY__];
var id = lib.isArray(ENV) ? ENV.length : key;
if (!(id in __comments__)) __comments__[id] = [_comment];else __comments__[id].push(_comment);
};
var saveKey = () => {
key = normalizeValue(content), clear();
if (lib.__EMPTY__ in ENV[lib.__COMMENTS_KEY__]) {
ENV[lib.__COMMENTS_KEY__][key] = ENV[lib.__COMMENTS_KEY__][lib.__EMPTY__];
delete ENV[lib.__COMMENTS_KEY__][lib.__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({
[lib.__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 lib.__ARRAY__:
setEnv(_slash ? null : lib.createArray());
break;
case lib.__DICT__:
setEnv(_slash ? null : lib.createObject());
break;
case lib.__KEY__:
initTag(_slash, lib.__KEY__, saveKey);
break;
case lib.__STRING__:
initTag(_slash, lib.__STRING__, saveString);
break;
case lib.__INTEGER__:
initTag(_slash, lib.__STRING__, saveInteger);
break;
case lib.__REAL__:
initTag(_slash, lib.__REAL__, saveReal);
break;
case lib.__DATE__:
initTag(_slash, lib.__DATE__, saveDate);
break;
case lib.__DATA__:
initTag(_slash, lib.__DATA__, saveData);
break;
case lib.__TRUE__:
saveBoolean(true);
break;
case lib.__FALSE__:
saveBoolean(false);
break;
}
break;
case !_content:
tag && (content += _content);
break;
}
return lib.__EMPTY__;
});
var res = plist;
if (plist.length === 1) {
res = plist[0];
lib.keys(plist[lib.__COMMENTS_KEY__]).forEach(key => {
if (!res[lib.__COMMENTS_KEY__][key]) {
res[lib.__COMMENTS_KEY__][key] = plist[lib.__COMMENTS_KEY__][key];
} else {
res[lib.__COMMENTS_KEY__][key][key !== lib.__EMPTY__ ? 'unshift' : 'push'](...plist[lib.__COMMENTS_KEY__][key]);
}
});
}
return res;
};
exports["default"] = plist2js;