@earvinpiamonte/pagasa-tcb-parser
Version:
A TypeScript library for parsing PAGASA weather bulletin PDF files
68 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractSignalNumber = exports.extractSignalBlocks = exports.extractSignals = void 0;
const patterns_1 = require("../constants/patterns");
const area_parser_1 = require("./area-parser");
const extractSignals = (text) => {
const signals = {};
const tcwsMatch = text.match(patterns_1.PATTERNS.tcws);
if (!tcwsMatch) {
return signals;
}
const tcwsSection = tcwsMatch[1];
const signalBlocks = (0, exports.extractSignalBlocks)(tcwsSection);
for (const block of signalBlocks) {
const signalNumber = (0, exports.extractSignalNumber)(block);
if (signalNumber) {
const regions = (0, area_parser_1.extractRegionsFromBlock)(block);
signals[signalNumber] = {
regions: {
luzon: regions.luzon,
visayas: regions.visayas,
mindanao: regions.mindanao,
},
};
}
}
return signals;
};
exports.extractSignals = extractSignals;
const extractSignalBlocks = (tcwsSection) => {
const blocks = [];
const lines = tcwsSection.split("\n");
let currentBlock = "";
let inSignalBlock = false;
for (const line of lines) {
const trimmedLine = line.trim();
if (patterns_1.PATTERNS.signalNumber.test(trimmedLine) ||
trimmedLine.includes("TCWS No.")) {
if (currentBlock && inSignalBlock) {
blocks.push(currentBlock);
}
currentBlock = line + "\n";
inSignalBlock = true;
}
else if (inSignalBlock) {
currentBlock += line + "\n";
if (trimmedLine.includes("OTHER HAZARDS") ||
trimmedLine.includes("HAZARDS AFFECTING")) {
break;
}
}
}
if (currentBlock && inSignalBlock) {
blocks.push(currentBlock);
}
return blocks.filter((block) => block.trim().length > 0);
};
exports.extractSignalBlocks = extractSignalBlocks;
const extractSignalNumber = (block) => {
const numberMatch = block.match(patterns_1.PATTERNS.signalMatch);
if (numberMatch) {
return numberMatch[1];
}
const tcwsMatch = block.match(patterns_1.PATTERNS.tcwsNumber);
return tcwsMatch ? tcwsMatch[1] : null;
};
exports.extractSignalNumber = extractSignalNumber;
//# sourceMappingURL=signal-parser.js.map