File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/@trapezedev/project/dist/util/strings.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateStrings = exports.parseStrings = void 0;
function parseStrings(contents) {
return parse(contents);
}
exports.parseStrings = parseStrings;
var State;
(function (State) {
State["None"] = "none";
State["Comment"] = "comment";
State["Key"] = "key";
State["AfterKey"] = "afterkey";
State["Value"] = "value";
State["AfterValue"] = "aftervalue";
})(State || (State = {}));
function parse(contents) {
let state = State.None;
let comment = "";
let whitespace = "";
let key = "";
let value = "";
let entries = [];
let line = 1;
let col = 1;
let startLine = 0;
let endLine = 0;
let startCol = 0;
let endCol = 0;
function setState(s) {
state = s;
}
for (let i = 0; i < contents.length; i++) {
const c = contents[i];
if (isNewLine(c)) {
// Keep track of lines
whitespace += c;
++line;
col = 0;
}
else if (isStartComment(c, contents[i + 1])) {
// Comment start, step forward one character
++i;
// Commit any whitespace up to this point
commitEntry(entries, {
content: whitespace,
startLine, startCol, endLine, endCol
});
// Mark starting source location
startCol = col;
startLine = line;
// Clear state
comment = "";
whitespace = "";
setState(State.Comment);
}
else if (isEndComment(c, contents[i + 1])) {
// Comment end, step forward one character
++i;
// Commit the comment
endLine = line;
endCol = col;
commitEntry(entries, {
comment, startLine, startCol, endLine, endCol
});
comment = "";
whitespace = "";
setState(State.None);
}
else if (state === State.Comment) {
// Build the comment
comment += c;
}
else if (isEquals(c) && (state === State.AfterKey || state === State.AfterValue)) {
// Valid state, do nothing
}
else if (isQuote(c)) {
// Quote encountered, check state
if (state === State.None) {
endLine = line;
endCol = col;
commitEntry(entries, {
content: whitespace,
startLine, startCol, endLine, endCol
});
startLine = line;
startCol = col;
setState(State.Key);
key = "";
whitespace = "";
}
else if (state === State.Key) {
// Key ends
setState(State.AfterKey);
}
else if (state === State.AfterKey) {
// Start of value
setState(State.Value);
value = "";
}
else if (state === State.Value) {
// End of value, commit it
setState(State.AfterValue);
}
}
else if (isSemi(c) && (state === State.AfterValue)) {
endLine = line;
endCol = col;
commitEntry(entries, {
key, value, startLine, startCol, endLine, endCol
});
// Clear state
comment = "";
whitespace = "";
key = "";
value = "";
setState(State.None);
}
else if (state === State.Key) {
// Build the key
key += c;
}
else if (state === State.Value) {
// Build the value
value += c;
}
else if (isWhitespace(c)) {
// Valid to have whitespace before/after lines
whitespace += c;
}
else if (isSemi(c)) {
// Valid state?
}
else {
throw new Error(`Error parsing .strings file: unknown character at ${line}:${col}`);
}
++col;
}
return entries;
}
function commitEntry(entries, entry) {
entries.push(entry);
}
function isNewLine(c) {
return c === '\n';
}
function isStartComment(c, c2) {
return c === '/' && c2 === '*';
}
function isEndComment(c, c2) {
return c === '*' && c2 === '/';
}
function isQuote(c) {
return c === '"';
}
function isEquals(c) {
return c === '=';
}
function isWhitespace(c) {
return isSpace(c) || isTab(c);
}
function isSpace(c) {
return c === ' ';
}
function isTab(c) {
return c === '\t';
}
function isSemi(c) {
return c === ';';
}
function generateStrings(entries) {
const lines = [];
for (const entry of entries) {
lines.push(...generateLines(entry));
}
return lines.join('');
}
exports.generateStrings = generateStrings;
function generateLines(entry) {
const lines = [];
if (entry.comment) {
lines.push(`/*${entry.comment}*/`);
}
else if (entry.key) {
lines.push(`"${entry.key}" = "${entry.value}";`);
}
else if (entry.content) {
lines.push(entry.content);
}
return lines;
}
//# sourceMappingURL=strings.js.map