@flourish/sdk
Version:
The Flourish SDK
151 lines (124 loc) • 4 kB
JavaScript
/* * * * * * GENERATED FILE - DO NOT EDIT * * * * * *
* * * * * * GENERATED FILE - DO NOT EDIT * * * * * *
* * * * * * GENERATED FILE - DO NOT EDIT * * * * * */
;
Object.defineProperty(exports, '__esModule', { value: true });
function parseColumn(col_spec) {
col_spec = col_spec.toUpperCase();
if (!/^[A-Z]+$/.test(col_spec)) {
throw new Error("Invalid column spec: " + col_spec);
}
var col_ix = 0;
for (var i = 0; i < col_spec.length; i++) {
col_ix = col_ix * 26 + (col_spec.charCodeAt(i) - 64);
}
return col_ix - 1;
}
function printColumn(col_ix) {
col_ix += 1;
var col_spec = "";
while (col_ix > 0) {
var q = Math.floor(col_ix / 26),
r = col_ix % 26;
if (r == 0) {
q -= 1;
r += 26;
}
col_spec = String.fromCharCode(64 + r) + col_spec;
col_ix = q;
}
return col_spec;
}
function parseRange(col_range) {
var dash_mo = col_range.match(/\s*(?:[-–—:]|\.\.)\s*/);
if (!dash_mo) throw new Error("Failed to parse column range: " + col_range);
var first = col_range.substr(0, dash_mo.index),
last = col_range.substr(dash_mo.index + dash_mo[0].length);
var first_ix = parseColumn(first),
last_ix = parseColumn(last);
var r = Array(Math.max(0, last_ix - first_ix + 1));
for (var i = 0; i <= last_ix - first_ix; i++) {
r[i] = i + first_ix;
}
return r;
}
function printRange(start, end) {
return printColumn(start) + "-" + printColumn(end);
}
function parseColumns(cols_spec) {
var indexes = [];
cols_spec = cols_spec.replace(/^\s+|\s+$/g, "");
var split_cols = cols_spec.split(/\s*,\s*/);
if (split_cols.length == 1 && split_cols[0] === "") split_cols = [];
for (var i = 0; i < split_cols.length; i++) {
var col_or_range = split_cols[i];
if (/^[A-Za-z]+$/.test(col_or_range)) {
indexes.push(parseColumn(col_or_range));
}
else {
Array.prototype.push.apply(indexes, parseRange(col_or_range));
}
}
return indexes;
}
function splitIntoRanges(indexes) {
var ranges = [];
var start, end;
for (var i = 0; i < indexes.length; i++) {
if (i > 0 && indexes[i] == indexes[i-1] + 1) {
end = indexes[i];
}
else {
if (typeof start != "undefined") ranges.push([start, end]);
start = end = indexes[i];
}
}
if (typeof start != "undefined") ranges.push([start, end]);
return ranges;
}
function printColumns(indexes) {
var ranges = splitIntoRanges(indexes);
var r = [];
for (var i = 0; i < ranges.length; i++) {
var range = ranges[i];
if (range[0] == range[1]) r.push(printColumn(range[0]));
else r.push(printRange(range[0], range[1]));
}
return r.join(",");
}
function parseDataBinding(d, data_table_ids) {
var r = {};
if (!(d.type in d)) {
if (d.optional) return r;
throw new Error("Data binding must specify '" + d.type + "': " + JSON.stringify(d));
}
var double_colon_ix = d[d.type].indexOf("::");
if (double_colon_ix == -1) throw new Error("Invalid data binding: " + d[d.type]);
var data_table_name = d[d.type].substr(0, double_colon_ix);
r.data_table_id = data_table_ids[data_table_name];
var col_spec = d[d.type].substr(double_colon_ix + 2);
if (d.type == "column") r.column = parseColumn(col_spec);
else if (d.type == "columns") r.columns = parseColumns(col_spec);
else throw new Error("Unknown data binding type: " + d.type);
return r;
}
function printDataBinding(r, data_table_names, print_data_table_name, optional) {
var data_table_name = print_data_table_name ? data_table_names[r.data_table_id] + "::" : "";
if ("column" in r) {
return data_table_name + printColumn(r.column);
}
else if ("columns" in r) {
return data_table_name + printColumns(r.columns);
}
else if (optional) {
return "";
}
throw new Error("Data binding must have .column or .columns");
}
exports.parseColumn = parseColumn;
exports.parseColumns = parseColumns;
exports.parseDataBinding = parseDataBinding;
exports.parseRange = parseRange;
exports.printColumn = printColumn;
exports.printColumns = printColumns;
exports.printDataBinding = printDataBinding;