function socialcalc_parse_edit in Sheetnode 7
Same name and namespace in other branches
- 5 socialcalc.inc \socialcalc_parse_edit()
- 6 socialcalc.inc \socialcalc_parse_edit()
- 7.2 socialcalc.inc \socialcalc_parse_edit()
File
- ./
socialcalc.inc, line 78 - SocialCalc manipulation functions Translated from socialcalc-3.js and companion files
Code
function socialcalc_parse_edit($data) {
$edit = array(
'rowpanes' => array(
0 => array(
'first' => 1,
'last' => 1,
),
),
'colpanes' => array(
0 => array(
'first' => 1,
'last' => 1,
),
),
'range' => array(
'hasrange' => FALSE,
),
);
$line = strtok($data, "\n");
while ($line !== FALSE) {
$line = rtrim($line);
$parts = explode(':', $line);
switch ($parts[0]) {
case "version":
break;
case "rowpane":
$edit['rowpanes'][$parts[1] - 0] = array(
'first' => $parts[2] - 0,
'last' => $parts[3] - 0,
);
break;
case "colpane":
$edit['colpanes'][$parts[1] - 0] = array(
'first' => $parts[2] - 0,
'last' => $parts[3] - 0,
);
break;
case "ecell":
$edit['ecell']['pos'] = socialcalc_coord_to_cr($parts[1]);
$edit['ecell']['coord'] = $parts[1];
$edit['highlights'][$parts[1]] = "cursor";
break;
case "range":
$range['hasrange'] = TRUE;
$range['anchorcoord'] = $parts[1];
$range['anchorpos'] = socialcalc_coord_to_cr($parts[1]);
$range['top'] = $parts[2] - 0;
$range['bottom'] = $parts[3] - 0;
$range['left'] = $parts[4] - 0;
$range['right'] = $parts[5] - 0;
for ($row = $range['top']; $row <= $range['bottom']; $row++) {
for ($col = $range['left']; $col <= $range['right']; $col++) {
$coord = socialcalc_cr_to_coord($col, $row);
if (@$edit['highlights'][$coord] != "cursor") {
$edit['highlights'][$coord] = "range";
}
}
}
$edit['range'] = $range;
break;
default:
$key = array_shift($parts);
$edit[$key] = $parts;
break;
}
$line = strtok("\n");
}
return $edit;
}