UNPKG

cpp-merge

Version:

Command line tool to produce single source file from multiple C/C++ files

48 lines 1.77 kB
"use strict"; 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