mirror of
https://github.com/kforney/pentest-distro-builder.git
synced 2024-10-06 20:48:51 -06:00
71 lines
2.6 KiB
JavaScript
71 lines
2.6 KiB
JavaScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
'use strict';
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const parser_1 = require("../parser");
|
||
|
class DockerComposeParser extends parser_1.Parser {
|
||
|
constructor() {
|
||
|
let parseRegex = /\:+$/g;
|
||
|
super(parseRegex);
|
||
|
}
|
||
|
parseLine(textLine) {
|
||
|
let r = [];
|
||
|
let lastTokenEndIndex = 0;
|
||
|
let lastPushedToken;
|
||
|
let emit = (end, type) => {
|
||
|
if (end <= lastTokenEndIndex) {
|
||
|
return;
|
||
|
}
|
||
|
if (lastPushedToken && lastPushedToken.type === type) {
|
||
|
// merge with last pushed token
|
||
|
lastPushedToken.endIndex = end;
|
||
|
lastTokenEndIndex = end;
|
||
|
return;
|
||
|
}
|
||
|
lastPushedToken = {
|
||
|
startIndex: lastTokenEndIndex,
|
||
|
endIndex: end,
|
||
|
type: type
|
||
|
};
|
||
|
r.push(lastPushedToken);
|
||
|
lastTokenEndIndex = end;
|
||
|
};
|
||
|
let inString = false;
|
||
|
let idx = textLine.firstNonWhitespaceCharacterIndex;
|
||
|
let line = textLine.text;
|
||
|
for (let i = idx, len = line.length; i < len; i++) {
|
||
|
let ch = line.charAt(i);
|
||
|
if (inString) {
|
||
|
if (ch === '"' && line.charAt(i - 1) !== '\\') {
|
||
|
inString = false;
|
||
|
emit(i + 1, parser_1.TokenType.String);
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
if (ch === '"') {
|
||
|
emit(i, parser_1.TokenType.Text);
|
||
|
inString = true;
|
||
|
continue;
|
||
|
}
|
||
|
if (ch === '#') {
|
||
|
// Comment the rest of the line
|
||
|
emit(i, parser_1.TokenType.Text);
|
||
|
emit(line.length, parser_1.TokenType.Comment);
|
||
|
break;
|
||
|
}
|
||
|
if (ch === ':') {
|
||
|
emit(i + 1, parser_1.TokenType.Key);
|
||
|
}
|
||
|
if (ch === ' ' || ch === '\t') {
|
||
|
emit(i, parser_1.TokenType.Text);
|
||
|
emit(i + 1, parser_1.TokenType.Whitespace);
|
||
|
}
|
||
|
}
|
||
|
emit(line.length, parser_1.TokenType.Text);
|
||
|
return r;
|
||
|
}
|
||
|
}
|
||
|
exports.DockerComposeParser = DockerComposeParser;
|
||
|
//# sourceMappingURL=dockerComposeParser.js.map
|