diff --git a/metar.html b/metar.html
index c646dd7..86a7110 100644
--- a/metar.html
+++ b/metar.html
@@ -246,6 +246,15 @@
'CU': 'Cumulus',
'CB': 'Cumulonimbus'
};
+ const specialRemarks = {
+ 'FROIN': 'Frontal passage in vicinity',
+ 'CONTRAILS': 'Contrails observed',
+ 'VIRGA': 'Virga (precipitation not reaching the ground)'
+ };
+ const directions = {
+ 'N': 'North', 'NE': 'Northeast', 'E': 'East', 'SE': 'Southeast',
+ 'S': 'South', 'SW': 'Southwest', 'W': 'West', 'NW': 'Northwest'
+ };
for (let i = 0; i < parts.length; i++) {
const part = parts[i];
@@ -255,6 +264,16 @@
decoded.push(` - ${decodeObscurationRemark(part)}`);
} else if (part.match(/^([A-Z]{2}\d)+$/)) {
decoded.push(` - ${decodeCloudTypesRemark(part)}`);
+ } else if (part === 'VIRGA' && i + 1 < parts.length && directions[parts[i+1]]) {
+ const direction = directions[parts[i+1]];
+ decoded.push(` - VIRGA ${parts[i+1]}: Virga to the ${direction.toLowerCase()}`);
+ i++; // Consume direction part
+ } else if (part === 'TCU' && i + 2 < parts.length && parts[i+1] === 'DSNT' && directions[parts[i+2]]) {
+ const direction = directions[parts[i+2]];
+ decoded.push(` - TCU DSNT ${parts[i+2]}: Towering cumulus distant ${direction.toLowerCase()}`);
+ i += 2; // Consume DSNT and direction
+ } else if (specialRemarks[part]) {
+ decoded.push(` - ${part}: ${specialRemarks[part]}`);
} else if (cloudTypes[part] && i + 1 < parts.length && parts[i + 1] === 'TR') {
const cloudName = cloudTypes[part];
decoded.push(` - ${part} ${parts[i+1]}: ${cloudName} clouds are translucent (thin)`);