Библиотека сайта rus-linux.net
Электронные таблицы SocialCalc
Глава 19 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: SocialCalc,
глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Audrey Tang, перевод: Н.Ромоданов
19.5. Формат сохранения save
Формат сохранения save является стандартным форматом MIME multipart/mixed, состоящим из четырех частей ext/plain; charset=UTF-8; в каждой части находится текст, разделяемый символами новой строки, с полями, которые отделяются друг от друга с помощью двоеточий. Это следующие части:
- Часть
meta, в которой перечислены типы других частей. - Часть
sheet, в котором перечислены формат и содержимое каждой ячейки, ширина каждого столбца (если не используется значение, определяемое по умолчанию), за которым следует список шрифтов, вариантов цвета и границ, используемых в листе. - Необязательная часть
edit, сохраняющая состояние редактораTableEditor, в том числе последнее положение элемента Ecell, а также зафиксированные размеры панелей строк/столбцов. - Необязательная часть
audit, в которой хранится история команд, выполненных в предыдущем сеансе редактирования.
Например, на рис.19.11 показана таблица с тремя ячейками со значением 1874 в ячейке A1, представляющей собой элемент ECell, формулой 2^2*43 в ячейке A2, и формулой SUM(Foo) в ячейке A3, выделенные жирным шрифтом, и ссылкой на диапазон A1:A2 с именем Foo.
Рис.19.11: Таблица с тремя ячейками
Сериализованный формат save таблицы выглядит следующим образом:
socialcalc:version:1.0
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave
--SocialCalcSpreadsheetControlSave
Content-type: text/plain; charset=UTF-8
# SocialCalc Spreadsheet Control Save
version:1.0
part:sheet
part:edit
part:audit
--SocialCalcSpreadsheetControlSave
Content-type: text/plain; charset=UTF-8
version:1.5
cell:A1:v:1874
cell:A2:vtf:n:172:2^2*43
cell:A3:vtf:n:2046:SUM(Foo):f:1
sheet:c:1:r:3
font:1:normal bold * *
name:FOO::A1\cA2
--SocialCalcSpreadsheetControlSave
Content-type: text/plain; charset=UTF-8
version:1.0
rowpane:0:1:14
colpane:0:1:16
ecell:A1
--SocialCalcSpreadsheetControlSave
Content-type: text/plain; charset=UTF-8
set A1 value n 1874
set A2 formula 2^2*43
name define Foo A1:A2
set A3 formula SUM(Foo)
--SocialCalcSpreadsheetControlSave--
Этот формат создавался таким образом, чтобы он был понятен человеку и чтобы его можно было относительно легко генерировать программно. Это дает возможность с помощью плагина Sheetnode из фреймворка Drupal, использующего язык PHP, выполнять преобразования между этим форматом и другими популярными форматами электронных таблиц, например, Excel (.xls) и OpenDocument (.ods).
Теперь, когда мы понимаем, как отдельные части в SocialCalc, сочетаются друг с другом, давайте рассмотрим два реальных примера расширений SocialCalc.
Далее: Расширенные возможности редактирования
