cpp-merge
Version:
Command line tool to produce single source file from multiple C/C++ files
48 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const os_1 = require("os");
class CppFileParser {
parse(fileContent) {
var _a, _b;
const fileLines = fileContent.split(os_1.EOL);
const content = [];
const systemIncludes = new Set();
const localIncludes = new Set();
let pragmaOnceFound = false;
let emptyCount = 0;
for (const line of fileLines) {
if (CppFileParser.pragmaOnceRegExp.test(line)) {
pragmaOnceFound = true;
continue;
}
const systemInclude = (_a = CppFileParser.systemIncludeRegExp.exec(line)) === null || _a === void 0 ? void 0 : _a[1];
if (systemInclude) {
systemIncludes.add(systemInclude);
continue;
}
const localInclude = (_b = CppFileParser.localIncludeRegExp.exec(line)) === null || _b === void 0 ? void 0 : _b[1];
if (localInclude) {
localIncludes.add(localInclude);
continue;
}
if (line) {
emptyCount = 0;
}
else if (++emptyCount > 1) {
continue;
}
content.push(line);
}
return {
processOnce: pragmaOnceFound,
localIncludes: Array.from(localIncludes.values()),
systemIncludes: Array.from(systemIncludes.values()),
content: content.join(os_1.EOL)
};
}
}
exports.default = CppFileParser;
CppFileParser.localIncludeRegExp = /^#include "([^"]+)"/;
CppFileParser.systemIncludeRegExp = /^#include <([^>]+)>/;
CppFileParser.pragmaOnceRegExp = /^#pragma once/;
//# sourceMappingURL=CppFileParser.js.map