Support escaping of tricky characters, support quoted strings

keys or values can be quoted or unquoted:
- leisure=park
- leisure="park"
- "leisure"=park
- "leisure"="park"
This commit is contained in:
Bryan Housel
2019-05-03 14:42:35 -04:00
parent 22b7e03d3b
commit 16ec25753d
+22 -3
View File
@@ -299,10 +299,29 @@ export function uiRawTagEditor(context) {
}
function stringify(s) {
return JSON.stringify(s).slice(1, -1); // without leading/trailing "
}
function unstringify(s) {
var leading = '';
var trailing = '';
if (s.length < 1 || s.charAt(0) !== '"') {
leading = '"';
}
if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
(s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
) {
trailing = '"';
}
return JSON.parse(leading + s + trailing);
}
function rowsToText(rows) {
var str = rows
.filter(function(row) { return row.key && row.key.trim() !== ''; })
.map(function(row) { return row.key + '=' + row.value; })
.map(function(row) { return stringify(row.key) + '=' + stringify(row.value); })
.join('\n');
return _state === 'hover' ? str : str + '\n';
@@ -315,8 +334,8 @@ export function uiRawTagEditor(context) {
newText.split('\n').forEach(function(row) {
var m = row.match(/^\s*([^=]+)=(.*)$/);
if (m !== null) {
var k = m[1].trim();
var v = m[2].trim();
var k = unstringify(m[1].trim());
var v = unstringify(m[2].trim());
newTags[k] = v;
}
});