1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 18:47:44 +00:00

Spreadsheet: Reformat the runtime file to comply with js standards

This commit is contained in:
AnotherTest 2020-08-24 20:08:32 +04:30 committed by Andreas Kling
parent 54036d660a
commit d0c96ba2d8

View file

@ -1,94 +1,92 @@
const sheet = this const sheet = this;
function range(start, end, column_step, row_step) { function range(start, end, columnStep, rowStep) {
column_step = integer(column_step ?? 1) columnStep = integer(columnStep ?? 1);
row_step = integer(row_step ?? 1) rowStep = integer(rowStep ?? 1);
start = sheet.parse_cell_name(start) ?? {column: 'A', row: 0} start = sheet.parse_cell_name(start) ?? { column: "A", row: 0 };
end = sheet.parse_cell_name(end) ?? start end = sheet.parse_cell_name(end) ?? start;
if (end.column.length > 1 || start.column.length > 1) if (end.column.length > 1 || start.column.length > 1)
throw new TypeError("Only single-letter column names are allowed (TODO)"); throw new TypeError("Only single-letter column names are allowed (TODO)");
const cells = [] const cells = [];
for (let col = Math.min(start.column.charCodeAt(0), end.column.charCodeAt(0)); for (
let col = Math.min(start.column.charCodeAt(0), end.column.charCodeAt(0));
col <= Math.max(start.column.charCodeAt(0), end.column.charCodeAt(0)); col <= Math.max(start.column.charCodeAt(0), end.column.charCodeAt(0));
++col) { col += columnStep
for (let row = Math.min(start.row, end.row); ) {
for (
let row = Math.min(start.row, end.row);
row <= Math.max(start.row, end.row); row <= Math.max(start.row, end.row);
++row) { row += rowStep
) {
cells.push(String.fromCharCode(col) + row) cells.push(String.fromCharCode(col) + row);
} }
} }
return cells return cells;
} }
// FIXME: Remove this and use String.split() eventually // FIXME: Remove this and use String.split() eventually
function split(str, sep) { function split(str, sep) {
const parts = [] const parts = [];
let split_index = -1 let splitIndex = -1;
for(;;) { for (;;) {
split_index = str.indexOf(sep) splitIndex = str.indexOf(sep);
if (split_index == -1) { if (splitIndex == -1) {
if (str.length) if (str.length) parts.push(str);
parts.push(str) return parts;
return parts
} }
parts.push(str.substring(0, split_index)) parts.push(str.substring(0, splitIndex));
str = str.slice(split_index + sep.length) str = str.slice(splitIndex + sep.length);
} }
} }
function R(fmt, ...args) { function R(fmt, ...args) {
if (args.length !== 0) if (args.length !== 0) throw new TypeError("R`` format must be literal");
throw new TypeError("R`` format must be literal")
fmt = fmt[0] fmt = fmt[0];
return range(...split(fmt, ':')) return range(...split(fmt, ":"));
} }
function select(criteria, t, f) { function select(criteria, t, f) {
if (criteria) if (criteria) return t;
return t;
return f; return f;
} }
function sumif(condition, cells) { function sumIf(condition, cells) {
let sum = null let sum = null;
for (let name of cells) { for (let name of cells) {
let cell = sheet[name] let cell = sheet[name];
if (condition(cell)) if (condition(cell)) sum = sum === null ? cell : sum + cell;
sum = sum === null ? cell : sum + cell
} }
return sum return sum;
} }
function countif(condition, cells) { function countIf(condition, cells) {
let count = 0 let count = 0;
for (let name of cells) { for (let name of cells) {
let cell = sheet[name] let cell = sheet[name];
if (condition(cell)) if (condition(cell)) count++;
count++
} }
return count return count;
} }
function now() { function now() {
return new Date() return new Date();
} }
function repeat(count, str) { function repeat(count, str) {
return Array(count + 1).join(str) return Array(count + 1).join(str);
} }
function randrange(min, max) { function randRange(min, max) {
return Math.random() * (max - min) + min return Math.random() * (max - min) + min;
} }
function integer(value) { function integer(value) {
return value | 0 return value | 0;
} }
// Cheat the system and add documentation // Cheat the system and add documentation
@ -141,3 +139,36 @@ countIf.__documentation = JSON.stringify({
now.__documentation = JSON.stringify({ now.__documentation = JSON.stringify({
name: "now", name: "now",
argc: 0,
argnames: [],
doc: "Returns a Date instance for the current moment",
examples: {},
});
repeat.__documentation = JSON.stringify({
name: "repeat",
argc: 2,
argnames: ["string", "count"],
doc: "Returns a string equivalent to `string` repeated `count` times",
examples: {
'repeat("a", 10)': 'Generates the string "aaaaaaaaaa"',
},
});
randRange.__documentation = JSON.stringify({
name: "randRange",
argc: 2,
argnames: ["start", "end"],
doc: "Returns a random number in the range (`start`, `end`)",
examples: {},
});
integer.__documentation = JSON.stringify({
name: "integer",
argc: 1,
argnames: ["value"],
doc: "Returns the integer value of `value`",
examples: {
"A1 = integer(A0)": "Sets the value of the cell A1 to the integer value of the cell A0",
},
});