Может быть уже сегодня дострою систему документации, но остается нерешенная следующая проблема. Документ описывается несложным подобием ini файла и нет соответственно потребности создавать отдельный редактор документа и как следствие этого нет необходимости заводить новые свойства у наследника поста, но впрочем это не имеет значения. Задача следующая: хочется создавать документацию прямо из блогклиента, просто написав соответствующий текст в посте. Проблема в том, что если навесить плагин на контент, отказавшись вообще от наследника от tpost, то придется отказаться от одной из оптимизаций и будет сложно отделить обыкновенные посты от документации. Мне жалко придуманную для документации оптимизацию: свойство поста filtered после каждого создания/редактирования будет очищаться и генерироваться по новой в при первом обращении. В настоящее время свойство filtered выполняет роль кеша фильтрованного контента. После создания нового документа, новый документ перелиновывается со старыми документами (если на него стояли ссылки через вики слова). Тогда получается, что вики слова дергаются только один раз, а не каждый раз при обращении к обычному посту.

На самом деле можно говорить о недостаточной оптимизации самого плагина вики слов. Если бы вики слова не связывались поздно (позднее связывание), то у меня не возникло бы жалости к фильтрованному контенту в документации. Отсюда вырисовывается пока абстрактное требования оптимизировать вики слова и для всех постов, исключив механизм позднего связывания.

Как же исключить позднее связывание вики слов? Хорошо бы придумать алгоритм регенерации фильтрованного контента для всех постов и включить этот алгоритм в ядро в виду его очевидной вкусности (право начинаю уже писать высоким штилем: он с вами будет биться на пистолетах, принепременно убьет...). Как же этого добиться? И как отделить посты нуждающиеся в регенерации фильтрованного контента от не нуждающихся в сем непотребстве? Очевидный экстенсивный путь - добавить новую опцию (галочку/флажок), а внутри стандартного поста в случае пустого фильтрованного контента и флажок поднят, то перегенирировать. Такой путь, через добавления новых опций, всегда плох, так как простые вещи обязаны быть простыми, а сложные не имеют право на жизнь. Как выкрутиться? Может быть сделать признаком необходимости регенерации отсутствие фильтрованного контента (пустая строка), либо добавить не флажок, а событие, которое должно дергаться при обращении к контенту? И на событие повесить плагин? Тогда плагин будет дергаться постоянно, когда как регенерация дело практически одноразовое.

Вариант с предварительным очищением фильтрованного контента и последующей проверкой на пустую строку является ресурсоемким и для файловой версии вообще не приемлемым, как впрочем и с индивидуальным флажком - для бд нормально, а для файловой версии накладно. Остается единственный вариант - плагин на событие. Даже для плагина на событие все равно надо как то хранить инфу о необходимости регенерации - по сути тот же флажок, только вынесенный за пределы поста. Можно поступить с флажком еще по другому - ввести понятие ревизии. Если номер ревизии меньше актуальной, то необходимо регенерировать и установить номер ревизии в текущий номер.

Кстати вариант с номером ревизии кажется мне самым простым и эффективным: для обычных постов ревизия вообще не меняется и соответственно регенерация не происходит. Если плагину нужно перефильтровать все посты (например захотелось не спеша обработать все старые посты плагином markdown), то достаточно увеличить номер ревизии. Спустя некоторое время весь сайт будет по новому перефильтрован. Ну например установил плагин внешних ссылок - увеличил номер ревизии, и через некоторое время все посты будут с внешними ссылками через редирект. Удалил плагин - и все посты вернули к старому варианту. Нагрузка на сервер будет отсутствовать - будь у сайта хот сто тысяч постов, а фильтр будет отрабатывать только один раз. И для вики слов не потребуется больше позднее связывание.

Так что вот таким столь неожиданным способом я пришел к идеи ревизий в блоголёте. Так что добавлю эту фичу и новая версия будет уже с ревизиями.