UNPKG

plist2

Version:

Converts between .tmLanguage(.plist), .json, .cson and .yaml formats

141 lines (138 loc) 4.34 kB
/* eslint-disable */ /* dester builds: plist2js.ts */ 'use strict'; 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(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&').replace(/&quot;/g, '"').replace(/&apos;/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;