Библиотека сайта 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.
Далее: Расширенные возможности редактирования