dotfiles/vscode/.vscode/extensions/randomfractalsinc.vscode-data-preview-2.3.0/node_modules/properties/lib/stringify.js
Errol Sancaktar ff17c17e23 vscode
2024-06-14 09:31:58 -06:00

212 lines
4.3 KiB
JavaScript

"use strict";
var escape = require ("./escape");
var Stringifier = require ("./stringifier");
//The data doesn't need to be buffered because .properties files typically
//have a size less than a block (default is 16KB)
var EOL = process.platform === "win32" ? "\r\n" : "\n";
var stringifyComment = function (comment, meta, options){
var c;
var code;
var str = options._comment;
for (var i=0; i<comment.length; i++){
c = comment[i];
code = comment.charCodeAt (i);
//code 13: \r
if (code === 13) continue;
if (code === 10){
//code 10: \n
str += EOL + options._comment;
}else{
str += escape (c, code, meta, options);
}
}
return str;
};
var stringifyKey = function (s, meta, options){
var c;
var code;
var str = "";
for (var i=0; i<s.length; i++){
c = s[i];
code = s.charCodeAt (i);
str += escape (c, code, meta, options);
}
return str;
};
var stringifyValue = function (s, meta, options){
var c;
var code;
var str = "";
for (var i=0; i<s.length; i++){
c = s[i];
code = s.charCodeAt (i);
//code 32: " " (space)
//code 9: \t
//code 12: \f
if (code !== 32 && code !== 9 && code !== 12){
meta.whitespace = false;
}
str += escape (c, code, meta, options);
}
return str;
};
var stringifyObject = function (obj, options){
var str = "";
var meta = {
separator: options._separator.charCodeAt (0)
};
var value;
var first = true;
if (options.replacer){
var o = {
assert: function (){
return replace.property ? replace.value : true;
},
isProperty: true,
isSection: false
};
}
for (var p in obj){
value = obj[p];
if (options.replacer){
value = options.replacer.call (o, p, value, null);
if (value === undefined) continue;
}
if (!first) str += EOL;
meta.whitespace = true;
meta.key = true;
str += stringifyKey (p, meta, options);
meta.key = false;
str += options._separator;
if (value !== null && value !== undefined){
str += stringifyValue (value + "", meta, options);
}
meta.whitespace = false;
first = false;
}
return str;
};
var stringifyStringifier = function (stringifier, options){
var str = "";
var meta = {
separator: options._separator.charCodeAt (0)
};
var first = true;
var currentSection = null;
var skipSection;
var value;
var replace;
if (options.replacer){
var o = {
assert: function (){
return replace.property ? replace.value : true;
}
};
}
if (stringifier._header){
meta.comment = true;
str += stringifyComment (stringifier._header, meta, options) + EOL + EOL;
meta.comment = false;
}
stringifier._lines.forEach (function (line){
replace = line;
if (options.replacer){
if (line.property){
if (skipSection) return;
o.isProperty = true;
o.isSection = false;
value = options.replacer.call (o, line.key, line.value, currentSection);
if (value === undefined) return;
line.value = value;
}else{
skipSection = false;
o.isProperty = false;
o.isSection = true;
if (options.replacer.call (o, null, null, line.name)){
currentSection = line.name;
}else{
skipSection = true;
return;
}
}
}
if (!first) str += line.property ? EOL : EOL + EOL;
if (line.comment){
meta.comment = true;
str += stringifyComment (line.comment, meta, options) + EOL;
meta.comment = false;
}
if (line.property){
meta.whitespace = true;
if (line.key !== null && line.key !== undefined){
meta.key = true;
str += stringifyKey (line.key + "", meta, options);
meta.key = false;
}
str += options._separator;
if (line.value !== null && line.value !== undefined){
str += stringifyValue (line.value + "", meta, options);
}
meta.whitespace = false;
}else{
if (line.name){
str += "[" + stringifyKey (line.name + "", meta, options) +
"]";
}else{
str += "[]";
}
}
first = false;
});
return str;
};
module.exports = function (stringifier, options){
if (!(stringifier instanceof Stringifier)){
return stringifyObject (stringifier, options);
}else{
return stringifyStringifier (stringifier, options);
}
};