Skip to content

Commit 41bdac1

Browse files
Prakhar Goelcursoragent
authored andcommitted
Add !units parser for feet, inches, meters, and centimeters
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent f75631d commit 41bdac1

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

‎Parsers/Convert length units.js‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
activation_example:!units 10 ft to m
3+
regex:!units\b
4+
flags:gmi
5+
order:200
6+
stop_processing:false
7+
*/
8+
9+
var USAGE = 'Usage: `!units 10 ft to m`. Supports mm, cm, m, km, in, ft, yd, mi.';
10+
var input = current.text.replace(/!units\b/gmi, '').trim();
11+
12+
if (input == '') {
13+
new x_snc_slackerbot.Slacker().send_chat(current, USAGE, true);
14+
} else {
15+
var match = input.match(/^(-?\d+\.?\d*)\s*([a-z]+)\s+to\s+([a-z]+)$/i);
16+
if (!match) {
17+
new x_snc_slackerbot.Slacker().send_chat(current, USAGE, true);
18+
} else {
19+
var amount = parseFloat(match[1]);
20+
var fromUnit = match[2].toLowerCase();
21+
var toUnit = match[3].toLowerCase();
22+
var fromMeters = unitToMeters(fromUnit);
23+
var toMeters = unitToMeters(toUnit);
24+
25+
if (isNaN(amount) || fromMeters === null || toMeters === null) {
26+
new x_snc_slackerbot.Slacker().send_chat(current, ':exclamation: Unknown unit. ' + USAGE, true);
27+
} else {
28+
var converted = amount * (fromMeters / toMeters);
29+
new x_snc_slackerbot.Slacker().send_chat(current, amount + ' ' + fromUnit + ' is ' + formatNumber(converted) + ' ' + toUnit + '.', false);
30+
}
31+
}
32+
}
33+
34+
function unitToMeters(unit) {
35+
var units = {
36+
mm: 0.001,
37+
millimeter: 0.001,
38+
millimeters: 0.001,
39+
millimetre: 0.001,
40+
millimetres: 0.001,
41+
cm: 0.01,
42+
centimeter: 0.01,
43+
centimeters: 0.01,
44+
centimetre: 0.01,
45+
centimetres: 0.01,
46+
m: 1,
47+
meter: 1,
48+
meters: 1,
49+
metre: 1,
50+
metres: 1,
51+
km: 1000,
52+
kilometer: 1000,
53+
kilometers: 1000,
54+
kilometre: 1000,
55+
kilometres: 1000,
56+
in: 0.0254,
57+
inch: 0.0254,
58+
inches: 0.0254,
59+
ft: 0.3048,
60+
foot: 0.3048,
61+
feet: 0.3048,
62+
yd: 0.9144,
63+
yard: 0.9144,
64+
yards: 0.9144,
65+
mi: 1609.344,
66+
mile: 1609.344,
67+
miles: 1609.344
68+
};
69+
70+
if (units.hasOwnProperty(unit)) {
71+
return units[unit];
72+
}
73+
return null;
74+
}
75+
76+
function formatNumber(num) {
77+
return String(Number(num.toFixed(4)));
78+
}

0 commit comments

Comments
 (0)