Histone — шаблонизатор с открытым исходным кодом для Java, JavaScript и PHP

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

Histone существует в версиях как для веб-браузера (JavaScript), так и для сервера (Java и PHP), что позволяет вам использовать одни и те же шаблоны и на сервере, и на клиенте. Встроенный механизм расширений позволяет наращивать функционал шаблонизатора за счёт добавления собственных методов и свойств, необходимых для конкретного проекта. Шаблоны имеют простой, интуитивно понятный синтаксис и могут храниться либо в виде исходного кода, либо в виде набора инструкций шаблонизатора, что позволяет получить максимальное быстродействие там, где это необходимо.

Что такое Histone?

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

В чем преимущества использования Histone?

Плюсы и минусы других шаблонизаторов

Прежде чем приступить к разработке собственного решения, мы изучили преимущества и недостатки уже существующих кроссплатформенных шаблонизаторов. Мы анализировали только популярные шаблонизаторы, широко используемые для построения современных веб-приложений. Мы не рассматривали решения, у которых нет хотя бы двух из трех интересующих нас реализаций (Java, JavaScript, PHP).

Google Closure templates

Плюс:

Минусы:

Mustache

Плюс:

Минусы:

Идеи, положенные в основу Histone

После анализа существующих продуктов наша команда приняла решение о создании нового шаблонизатора, который бы обладал лучшими сторонами вышеперечисленных продуктов, а также исправлял бы те минусы и недочеты, которые являются критичными для нас. В результате был сформирован список основных идей, которые были положены в основу Histone:

— Один шаблон — множество имплементаций шаблонизатора. Синтаксис шаблона не зависит от языка программирования, который используется для его обработки. Это необходимо для того, чтобы одни и те же шаблоны можно было обрабатывать как на сервере, так и в браузере и получать при этом один и тот  же результат.

— Традиционный и интуитивно понятный синтаксис. Конструкции, обрабатываемые шаблонизатором, помещаются между разделителями {{ и }}, все остальное попадает в результат обработки шаблона «as is».

— Невозможность выполнения кода напрямую из шаблона. Многие шаблонизаторы могут выполнять код соответствующего языка программирования напрямую из шаблона. Это не позволяет использовать такой шаблон со вставками кода специфического языка в имплементациях на других языках. Поэтому такая возможность в Histone полностью исключена.

— Простота расширения. Вне зависимости от языка программирования, который используется для обработки шаблона, предоставляемый API позволяет добавить новую функцию или свойство для её использования в шаблоне в целях удовлетворения потребностей любого проекта.

— Возможность использования одного источника данных для шаблонов, обрабатываемых на разных платформах. Универсальным форматом данных, для поддержки которого в Histone существует все необходимое, является JSON. Вне зависимости от того, каким набором типов данных обладает язык имплементации, язык шаблона позволяет работать с подмножеством типов данных, определенных для формата JSON. (смысл фразы в том, что какой бы язык программирования мы не использовали, мы можем работать с любым типом данных, входящим в подмножество типов данных, определенных для формата JSON).

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

— Кроссплатформенность и облегчение портирования. Реализации для языков JavaScript, Java и PHP доступны «из коробки». Отказ от использования специфических внешних библиотек наравне с логичной организацией кода позволяет произвести портирование реализации Histone на любой другой язык программирования, к примеру, C++, Ruby, Objective-C, ActionScript и т. д.

— Производительность. В отличие от Google Closure Templates, Histone не производит преобразование кода шаблона в исходный код того языка программирования, на котором планируется его обработка. Вместо этого существует возможность с помощью специальной утилиты, входящей в состав продукта, скомпилировать исходный код шаблона в форму, исполнение которой будет происходить, минуя этап его разбора и парсинга (самой дорогостоящей операции). Кроме того, на данном этапе происходит выполнение тех частей шаблона, которые не зависят от функций, свойств и переменных, определенных извне.

Histone и Sublime Text 2

17.09.2012

Теперь вы можете комфортно работать с Histone в редакторе Sublime Text 2. Для этого мы создали плагин который осуществляет подсветку синтаксиса языка шаблонов в Histone в этом набирающем популярность редакторе. Скачайте и установите плагин следуя инструкциям.Читать далее »

Histone - консоль

12.09.2012

Отличные новости! Теперь вы можете попробовать Histon без необходимости установки и настройки чего - либо, для этого вы можете воспользоваться нашим новым приложением, которое позволяет вам запустить обработку шаблона прямо в браузере. Просто откройте приложение по приведенной ниже ссылке в вашем любимом браузере, введите код шаблона в редакторе расположенном в левой части окна приложения и нажмите кнопку "Execute", результат обработки шаблона будет отображен в правой части окна приложения. Для изменения формата результата обработки шаблона (HTML или текст), воспользуйтесь соответствующим выпадающим списком, расположенным в правой части панели инструментов.  Мы будем продолжать работу над данным приложением, а потому следите за обновлениями. Приложение доступно по ссылке: http://megafonweblab.github.com/histone-javascript/Читать далее »

Histone 1.0-M1 (beta)

23.08.2012

Представляем вашему вниманию релиз первого майлстона версии 1.0. Данный майлстон ляжет в основу будущего релиза, после полномасштабного тестирования и исправления багов. Основы синтаксиса, а также API не претерпят существенных изменений в будущих майлстонах версии 1.0. Если вам не безинтересен данный проект, пожалуйста примите участие в его тестировании и поиску недочетов. Релиз доступен по ссылке: здесь должна быть ссылка В случае, если в ходе тестирования вы обнаружили баг, дайте нам знать о нем, создайте тикет в нашем баг - трэкере, но прежде ознакомьтесь со списком уже обнаруженных багов.Читать далее »

Блог нашего проекта

10.08.2012

Представляем вашему вниманию блог нашего проекта. Здесь мы будем публиковать информацию о новых релизах, важных изменениях функционала а также примерах реального использования шаблонизатора Histone в веб - приложениях. Ну а пока, более подробно с информацией о проекте вы можете ознакомиться в нашей документации. У нас есть своя баг - трэкинг система, которая может быть использована вами для сообщения нам о найденных вами багах а также о возможностях которые вы бы хотели включить в следующие релизы Histone.Читать далее »