antsibull-docs
Version:
TypeScript library for processing Ansible documentation markup
108 lines • 3.57 kB
JavaScript
;
/*
Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
SPDX-FileCopyrightText: Ansible Project
SPDX-License-Identifier: BSD-2-Clause
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseEscapedArgs = parseEscapedArgs;
exports.parseUnescapedArgs = parseUnescapedArgs;
function lstripSpace(input) {
let index = 0;
const length = input.length;
while (index < length && input[index] === ' ') {
index += 1;
}
return index > 0 ? input.slice(index) : input;
}
function rstripSpace(input) {
const length = input.length;
let index = length;
while (index > 0 && input[index - 1] === ' ') {
index -= 1;
}
return index < length ? input.slice(0, index) : input;
}
function parseEscapedArgs(input, index, count) {
const result = [];
let parameter_count = count;
const escapeOrComma = /\\(.)| *(,) */g;
while (parameter_count > 1) {
parameter_count -= 1;
const value = [];
while (true) {
escapeOrComma.lastIndex = index;
const match = escapeOrComma.exec(input);
if (!match) {
result.push(value.join(''));
return [
result,
input.length,
`Cannot find comma separating parameter ${count - parameter_count} from the next one`,
];
}
if (match.index > index) {
value.push(input.substring(index, match.index));
}
index = match.index + match[0].length;
if (match[1] === undefined) {
break;
}
value.push(match[1]);
}
result.push(value.join(''));
}
const escapeOrClosing = /\\(.)|([)])/g;
const value = [];
while (true) {
escapeOrClosing.lastIndex = index;
const match = escapeOrClosing.exec(input);
if (!match) {
result.push(value.join(''));
return [result, input.length, 'Cannot find closing ")" after last parameter'];
}
if (match.index > index) {
value.push(input.substring(index, match.index));
}
index = match.index + match[0].length;
if (match[1] === undefined) {
break;
}
value.push(match[1]);
}
result.push(value.join(''));
return [result, index, undefined];
}
function parseUnescapedArgs(input, index, count) {
const result = [];
let first = true;
let paramsLeft = count;
while (paramsLeft > 1) {
paramsLeft -= 1;
const nextIndex = input.indexOf(',', index);
if (nextIndex < 0) {
return [result, input.length, `Cannot find comma separating parameter ${count - paramsLeft} from the next one`];
}
let parameter = input.slice(index, nextIndex);
parameter = rstripSpace(parameter);
if (first) {
first = false;
}
else {
parameter = lstripSpace(parameter);
}
result.push(parameter);
index = nextIndex + 1;
}
const nextIndex = input.indexOf(')', index);
if (nextIndex < 0) {
return [result, input.length, 'Cannot find closing ")" after last parameter'];
}
let parameter = input.slice(index, nextIndex);
if (!first) {
parameter = lstripSpace(parameter);
}
result.push(parameter);
return [result, nextIndex + 1, undefined];
}
//# sourceMappingURL=parser-impl.js.map