О небольших, но бесяще важных различиях текстовых редакторов

Привет! Я из команды «Р7-Офис», и я немного гик текстового редактирования. Например, в MS Word, равно как и в нашем редакторе Р7, есть двойное зачёркивание, а вот в других русских офисах такой фичи «из коробки» нет. На самом деле это очень русская фишка: у нас есть госкомпании, которые по своим стандартам должны использовать именно двойное зачёркивание в ряде ситуаций. И если эту функцию не поддерживать, то где-то далеко в Сибири заплачет ещё один инженер.

Выбор начала нумерации нумерованного списка — диалоговое окноВыбор начала нумерации нумерованного списка — диалоговое окно

У нас нет разницы между ядрами онлайн-редактора и десктопной версией. У большинства офисных пакетов эволюция прослеживается с тех времён, когда никакого онлайна толком не было и внутри монолита можно было построить Римскую империю. Поэтому при переходе к онлайну они обычно не трогали старую кодовую базу, а просто выписывали её основные свойства в бэклог и повторяли в новой версии. Как метод рефакторинга подход замечательный, если не считать того, что полностью скопировать исходный функционал не всегда получается (и не всегда экономически оправданно, видимо) и в итоге приходится поддерживать два разных продукта, которые нередко для пользователя выглядят как один.

Но я бы хотел рассказать немного о буднях того, что происходит в «исконно славянском труЪ офисе». Начнём с подхода к открытию и сохранению docx и плавно перейдём к тому, каких функций вам не хватает.

Подход к открытию и сохранению docx/xlsx

Это то, что в первую очередь волнует почти всех клиентов, потому что миграция с MS на другие решения — это почти всегда поломанные документы. А много поломанных документов часто означает конец демо и миграцию обратно, даже если нужно очень сильно исхитриться и так купить MS Office, чтобы Microsoft не заметила, что продаёт его какому-нибудь оборонному комплексу. Я сейчас шучу, конечно.

Форматы *.docx и *.xlsx стали открытыми по ISO / IEC 29500: 2008, как можно догадаться, в 2008 году. Давайте ещё раз: docx/xlsx — это НЕ проприетарные форматы Microsoft (но при этом doc/xls — устаревшие проприетарные).

Историческое наследие или какие-то другие причины заставляют многие офисные пакеты при открытии этих файлов выполнять следующие операции:

  1. Чтение всего файла целиком.

  2. Конвертацию в свой «родной исконный» формат, с которым работает редактор.

  3. При редактировании — работать с временным файлом целиком в родном формате.

  4. При сохранении — конвертировать обратно в docx.

Внутри docx представляет собой, упрощая, XML и все вложенные файлы. Кстати, можно переименовать файл в *.zip, распаковать его и получить все картинки документа, причём правильно пронумерованные.

Этот самый XML описывается не MS-стандартом, поэтому MS его просто интерпретирует и исполняет как получается. Дальше ситуация — как с браузерами: стандарт вроде один, а рендер у всех разный. Так и с документами: рендер у всех разный. И проблема в том, что при полной конвертации любая ошибка будет записана обратно в файл, и он побьётся.

Следующий интересный момент в том, что будет, если записать в файл что-то, что «не ест» какой-то из офисов, например, реализацию чего-то, что не умеет обрабатывать при конвертации маковский Pages или виндовый MS Office. Где-то это полностью поломает документ, и он не будет открываться, где-то это уберёт часть элементов (например, таблицы или автофигуры) и так далее.

У нас в Р7-Офис подход — интерпретация формата. То есть, когда пользователь открывает docx, мы читаем всё то, что там есть, и рендерим ему. При редактировании какого-то блока мы лезем в XML только в этом блоке, записывая его редактирование. В остальном документ сохраняется в неизменном виде, что позволяет очень аккуратно с ним работать. Если в документе есть что-то, чего мы не умеем редактировать, то оно рендерится только на просмотр. Если там есть что-то, чего мы вообще не понимаем, то оно не рендерится, но сохраняется в документе для того редактора, который это нахезал.

Соответственно, обновляя код ядра редактора, мы можем последовательно улучшать работу в точках совместимости, если пользователи репортят что-то важное.

Да, и ещё в пакете идут метрические аналоги типовых шрифтов, которые в итоге не ломают разметку документа: это тоже достаточно важно при миграции.

Отличия для гиков

Разница в архитектурах «десктоп-онлайн» часто ведёт к странным последствиям. Например, если у того же MS Office 365 — разные возможности текстового редактора на десктопе и в онлайне, то у нас — одно общее ядро.

Это приводит к тому, что пользователи MS не могут, например, в онлайн-редактировании задать начало нумерации списка (и он всегда будет начинаться с того, что злой дух-покровитель грабель считает правильным); не могут удалить одну ячейку в таблице, но могут столбец или строчку, то есть просто кто-то не дописал одно диалоговое окно; не могут разбить текст на колонки и так далее. Но не надо думать, что редактор MS — это аналог WordPad’а по уровню сложности. Ещё один русский облачный пакет, например, не даст вам настроить параметры абзаца, буквицу и иероглифы, добавить водяной знак и так далее (а MS всё это поддерживает).

Расскажу, отчего плакали и кололись наши пользователи. Всего за крупный релиз (с частотой примерно в полгода, например, с 5.5 на 6.0) у нас приходится около 500 разных фич, но просто покажу несколько ярких примеров.

  • У нас есть возможность делать текст всеми заглавными, всеми строчными или капительным набором. Это пример функции, которая была очень важна первым корпоративным пользователям: видимо, часто в документах такое встречается.

  • Не везде есть изменение стиля обтекания для таблиц (чтобы была встроенная в документ плавающая таблица), настройка диаграммы-пирога мышью (кому-то было критично «раздвигать» куски).

  • Где-то далеко в снегах люди сатанели оттого, что нельзя вставить в таблицу сразу несколько строк или столбцов. Потому что кое-где можно только по одной или по одному соответственно.

  • Не везде есть вставка изображений из сети по URL-адресу: это не хотлинкинг, это загрузка картинки и импорт в документ. По локальному-то адресу можно везде, а вот с URI есть проблемы.

  • Кому-то очень не хватало направляющих при перемещении объектов, чтобы при хватании мышкой за объект можно было выравнивать его по другим объектам. Думаю, что отсутствие таких направляющих — это очень циничное издевательство над перфекционистами.

  • Кое-где мы спасли штабного писаря (и ещё сотню маркетологов) тем, что рассказали про функцию слияния: это когда можно взять шаблон письма docx, слить с таблицей имён/должностей/адресов в xlsx и получить набор личных документов для каждого. Дембельский аккорд занял у этого человека минут на 15 времени больше, чем понадобилось для чтения соответствующего раздела справки.

Но при этом кое-где нас ограничивает как раз MS Office: например, нам ничего не мешает делать фичи, которые в нём не поддерживаются, только они будут пропадать в его рендере. Так, например, если в режиме рецензирования оставить комментарий к документу, то можно оставить на него же ответ. Никто не мешает оставить ответ на ответ, чтобы получались ветки комментариев, ну, кроме тех, кто интерпретировал стандарт. В итоге мы тоже ограничиваем эти ответы вторым уровнем вложенности, чтобы документ нормально показывался везде без танцев с бубном. Вы, конечно, можете сказать, что можно вставлять звуковые файлы в контейнере при сохранении docx, а я, в свою очередь, скажу вам, что это грязное извращение. Во-первых, из-за самой идеи контейнера, а во-вторых, из-за того, что эти контейнеры отправят своими габаритами к чёртовой бабушке всю разметку документа. Даже если пользователь делал её нормально, а не пробелами и абзацами, что, надо признать, случается редко.

Каких функций вам не хватает?

Расскажите, пожалуйста, каких удобных вещей для текстового редактора вам не хватает: есть ли что-то, что вы делаете через 10 диалоговых окон или внешние приложения? Есть ли вещи, которые прямо важны по стандартам корпоративного документооборота, а сделать их никак не выходит? Есть ли что-то, с чем вам просто жилось бы удобнее? Я не могу обещать, что мы их сразу же запилим в следующем релизе, но в бэклог положим. С одной стороны, конечно, мы не так богаты на фичи, как пакеты, заставшие 386-е процессоры, но с другой — у нас чистая хорошая архитектура, поэтому реализовать быстро можем много чего.

© Habrahabr.ru