Як ONLYOFFICE помирив два покоління формул Microsoft

Коли ми розробляли наші редактори документів, ми хотіли дати користувачеві можливість зручно працювати з будь-яким об'єктом. Однією з перешкод, що виникли на шляху до редагування всього і відразу і прямо в цьому вікні, сталі формули, а точніше — їх двоїстість. Студенти технічних вузів стикалися з цим явищем майже зі стовідсотковою ймовірністю: мова йде про існування «старих» (бінарний .doc) і «нових» (прогресивний XML) формул в редакторах пакету MS Office.

У цій статті ми розповімо, як ця проблема вирішується в редакторах ONLYOFFICE. Відповідь проста: До – «Конвертація». Ми конвертуємо старі формули в доступні для редагування нові формули і вкрай задоволені своєю ідеєю. Чому ми пішли таким шляхом і як влаштована конвертація, читайте далі.



Дуалізм формул

В редакторах Microsoft до цих пір можна набирати формули двох різних форматів.

Старий формат формул — це формули, які створювалися в MS Office 2007 року з допомогою надбудови Microsoft Equation. Наприклад, щоб створити таку формулу в word'і, користувач викликає сторонній редактор через меню (Вставити -> Об'єкт -> Microsoft Equation). По цій команді відкривається редактор формул, який насправді є спрощеною версією програми Math Type від компанії Design Science.

Таким чином, старі формули є об'єктами OLE. Word просто віддає певну область документа іншим додатком, навіть не підозрюючи, чим це додаток в ній займається. Після закриття MS Equation Word відноситься до створеним в ньому формулами як до картинок, вбудованим в текст. Їх можна відредагувати в самому тексті — треба знову викликати редактор формул.

У 2007 році розпочався перехід на docx. Разом з ним у Microsoft з'явився свій редактор формул, можливості якого значно ширше. По-перше, в ньому більше математичних символів та шаблонів. По-друге, новий редактор дозволяє word'у працювати з формулами як з частиною тексту, а не як з картинками. Таким чином, новий редактор формул — це WYSIWYG редактор.

Здавалося, що життя математиків і всі, кому потрібні були формули, повинна була спроститися з появою нового редактора. Але виникла проблема. Перехід на формат docx не відбулося миттєво — залишився великий масив документів у форматі doc. Більше того — багато хто вперто продовжують зберігати документи в doc. І це не дивно — у багатьох залишилися старі комп'ютери і старі версії MS Office.

Отже, користувачі досі зберігають файли в docx, так і в doc. Крім того, існує гігантська кількість документів формату doc, які ніколи не будуть сконвертированы в docx, і гігантське число людей, яким доводиться мати справу з цими документами і створеними у них формулами.

Як вирішують проблему різні редактори документів

  • Два редактора. Microsoft на всякий пожежний тримає два редактора формул — новий на панелі інструментів і старий за тією ж адресою (меню Вставити -> Об'єкт). Логічно, що старий редактор вже не розвивається. Він просто існує на випадок відкриття документа у форматі doc або файлу docx, що містить старі формули.
  • Нуль редакторів. Онлайн-версія word'а формули не підтримує в принципі. Вона покаже їх у переглядачі, але в режимі редагування на місці формул буде показана загадковий напис «Equation».
  • Підтримка нових формул. Google Docs відображає старі формули картинками, а нові дозволяє редагувати. Про підхід Google до редагування формул ми писали в одній з попередніх статей. Якщо коротко, то редагування складних формул у цьому редакторі фізично неможливо. По-перше, створюючи формули, користувач працює в одному рядку (не можна працювати з матрицями, системами рівнянь тощо). По-друге, щоб відобразити або набрати формули використовуються символи існуючих шрифтів.
  • Конвертація у власний формат. OpenOffice конвертує обидва типи формул у свій власний формат і працює виключно з ним.


Підхід ONLYOFFICE

Природно, ми хотіли підтримувати обидва типи формул. У той же час нам здавалося логічним брати за основу саме нові формули. Нашим основним форматом все-таки є docx.

Нам не хотілося робити два редактори, як Microsoft, — це ресурсозатратно і безперспективно. До того ж, ми і так можемо ідеально відобразити старі формули, збережені в docx. Писати окремий редактор для них було б зовсім дивно, і ось що ми вирішили: даємо користувачеві робити з новими формулами все, що він хоче, а старі показуємо у вигляді векторних зображень. Але це не означає, що тепер він нічого не зможе в них поміняти — одне елегантний рух мишкою (також відоме як подвійне клацання) і старі формули сконвертируются в нові, повністю доступні для редагування.

Як влаштована конвертація

Стара формула зберігається в документі docx в двох варіантах — у вигляді векторної картинки wmf і у вигляді об'єкта OLE (бінарника зі старою формулою). Якщо до нас в документі прийшла стара формула, ми показуємо її як картинку, таку, як записав Word. Тому в редакторах ONLYOFFICE файл зі старими формулами відкриється точно також як і в Word'е.

При конвертації дещо форматування може поїхати, тобто змінитися, оскільки формати старих і нових формул кардинально відрізняються. Але це легко можна виправити, адже тепер всі об'єкти документа доступні для редагування.

Невеликий секрет: насправді, формули конвертятся ще до того, як цього захоче користувач. Ми парсим бінарники на сервері ще до відкриття файлу, а картинки показуємо, щоб зберегти вид документа. Але якщо користувачеві потрібно, ми ці картинки швидко міняємо на сконвертированную формулу.

Тут нас можна назвати оригінальними: ніхто не конвертує старий формат в новий взагалі. Навіть Word. Редактори ONLYOFFICE дозволяють поправити формули в doc, потім перевести все в docx і більше ніколи про це не думати.

Щоб зробити таку конвертацію, нам довелося навчитися відкривати закритий формат, специфікацій якого немає ніде. За великим рахунком він распарсен нами методом реверс-інжинірингу. Нам довелося провести досить пристойна кількість часу з сотнями дрібних файлів з формулами, спостерігаючи, як змінюється поведінка бінарника в залежності від того, що ми дописуємо в формулу. Втім, воно того варте. Не могли ж ми залишити користувача з картинками замість формул  : )

Труднощі

Єдина складність, яка може виникнути при конвертації старих формул у нові — це несумісність форматів один з одним. У таких випадках нам доводилося попрацювати, щоб перевести одну формулу схожу.

Наприклад, розглянемо систему з трьох рівнянь у старому форматі



Для рівнянь задається вирівнювання по лівому краю (по центру/по правому краю) у новому форматі такого вирівнювання немає (рівняння розміщуються по центру)



Щоб реалізувати вирівнювання по лівому краю в нових формулах досить поставити & в початок кожного рівняння. Збільшивши мінімальну відстань між опорними лініями, отримаємо



В принципі прийнятний результат конвертації. Після конвертації, якщо потрібно, можна ще трохи підредагувати систему, розмістивши & в потрібних місцях перед змінними, отримаємо результат, який складно зробити в старих формулах



Замість висновку

Ми намагалися зробити роботу з формулами максимально зручною для користувачів ONLYOFFICE і цілком задоволені результатом. Сподіваємося, що, зробивши конвертацію формул старого формату в новий, ми внесли свій внесок у загальний перехід на docx. Просто забирайте формули з doc'ів і більше ніколи туди не повертайтеся.

А ще — ми не перестаємо покращувати наші редактори. Головним пріоритетом найближчим часом стане робота над виділенням. Крім того, зовсім скоро вийде великий пакет оновлень по всім модулям ONLYOFFICE. У числі головних — надання документа docx c правами на рецензування (воно з'явилося ще у версії редакторів 3.6, але тепер працювати з ним стало ще зручніше). Загалом, залишайтеся з нами  : )

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.