Haml
Haml | |
---|---|
![]() | |
Парадигма | Мова для шаблонів |
Творці | Нік Волш |
Розробник | Норман Кларк, Мет Вайлдіґ, Акіра Мацуда, Ті Перхем |
Останній реліз | 4.0.7 (10 серпня 2015) |
Мова реалізації | Ruby |
Операційна система | Крос-платформова |
Ліцензія | MIT License,[1] Unspace Interactive.[2] |
Звичайні розширення файлів | .haml |
Репозиторій вихідного коду | github.com/haml/haml |
Вебсайт | haml.info |
Haml (HTML Abstraction Markup Language) — це мова для написання шаблонів, головною метою якої є написання простого і легкого для сприйняття коду, який інтерпретується в звичайний HTML. Haml дає змогу писати динамічний код для HTML. Аналогічно іншим мовам програмування для вебу, таких як PHP, ASP, JSP та шаблонних систем типа eRuby, Haml також дозволяє писати код, що буде виконаний протягом генерації HTML і отримати динамічний код. Розширення файлів з кодом − .haml. Такий підхід до роботи схожий на файли .erb (eRuby), що дозволяють вставляти код, написаний на Ruby для генерації коду вебзастосунків. Під час обробки коду Haml користується тими ж правилами, що й Ruby версії 1.9 і новіше. Haml розпізнає тільки кодування, сумісні з ASCII, такі як UTF-8, але при цьому не працює з UTF-16 чи UTF-32 через те, що вони несумісні з ASCII.[3][4] Haml може працювати через командний рядок як окремий модуль Ruby або ж використовуватися в Ruby on Rails, що робить цю мову гнучкою та зручною для створення багатьох видів застосунків.
Історія
Haml було створено Гемптоном Кетліном у 2006 р.[5] Його метою було спрощення написання і редагування коду на HTML. З 2006 року вийшло кілька оновлених версій цієї мови. У квітні 2012-го роботу над Haml взяв на себе Норман Кларк [Архівовано 10 вересня 2014 у Wayback Machine.].[5] Наталі Вайзенбаум [Архівовано 23 січня 2016 у Wayback Machine.] та Нік Волш [Архівовано 23 березня 2016 у Wayback Machine.] допомагали вдосконалювати мову і продовжують підтримувати її розвиток. Наталі працювала над тим, щоб HAML був сусісним з застосунками на Ruby, а дизайном та брендінґом займався Нік [Архівовано 23 березня 2016 у Wayback Machine.].[5] Також над проектом працюють Мет Вілдіґ [Архівовано 10 вересня 2014 у Wayback Machine.], Акіра Мацуда [Архівовано 23 березня 2016 у Wayback Machine.] and Ті Пергем [Архівовано 10 вересня 2014 у Wayback Machine.].[2]
Особливості
Haml базується на чотирьох принципах.[5]
Розмітка, яку легко читати
Розмітка коду цією мовою має відповідати наступним правилам:
- Легко розуміти
- Легко використовувати
Розмітка має відповідати принципу DRY. Вона має:
- Уникати непотрібних повторень
- Приділяти увагу чистоті коду
Прості відступи
Мову розмітки зі зручними відступами легко читати і відразу бачити початок та кінець коду елементів.
Зрозуміла структура
Зрозуміла структура коду допомагає легко його масштабувати і редагувати.
Приклади
Розмітка Haml дуже схожа на синтаксис CSS. Наприклад, в Haml символ .
відповідає за визначення класів, як це робиться в CSS.
Приклад «Hello, World»
Просте рішення для Hello World на Haml виглядатиме так:
Haml as a Command-line tool
%p{:class => "sample", :id => "welcome"} Hello, World!
Що буде екпортовано в наступний HTML:
<p class="sample" id="welcome">Hello, World!</p>
Щоб запустити код Haml, потрібно інсталювати Haml
за допомогою gem:[6]
gem install haml
Код Haml, що збережений у файл Hello.haml
, можна запустити наступним чином:
haml Hello.haml
Haml у вигляді джема для Ruby on Rails
Щоб використовувати Haml з Ruby, файл Gemfile
має включати наступний рядок:
gem 'haml'
Аналогічно до мови ERB, Haml також може оперувати локальними змінними, що задекларовані в тому ж файлі в Ruby-коді. Цей код містить приклад коду контролера Ruby.[6]
- файл: app/controllers/messages_controller.rb
class MessagesController < ApplicationController def index @message = "Hello, World!" end end
- файл: app/views/messages/index.html.hamlБуде скомпільовано в:
#welcome %p= @message
<div id="welcome"> <p>Hello, World!</p> </div>
Haml як модуль Ruby
Щоб користуватись Haml окремо від Rails та ActionView [Архівовано 28 травня 2017 у Wayback Machine.], інсталюйте haml
за допомогою gem, включіть його до Gemfile
, а далі імпортуйте [Usage: require 'haml']
до скрипту на Ruby або запустіть інтерпретатор Ruby за допомогою -rubygems
.
welcome = Haml::Engine.new("%p Hello, World!") welcome.render
Результат:
<p>Hello, World!</p>
Haml::Engine [Архівовано 2 червня 2017 у Wayback Machine.] є класом Haml.
Приклад
Haml використовує відступи у вигляді двох пробілів для створення вкладених тегів. Це служить еквівалентом відкриттю і закриттю парних тегів у HTML, притримуючись методу DRY, роблячи код простим і легким для читання. Наступний приклад показує відмінності між Haml та ERB (з використанням Ruby).
Haml | ERB |
---|---|
%div.category %div.recipes %h1= recipe.name %h3= recipe.category %div %h4= recipe.description | <div class="category"> <div class="recipes"> <h1><%= recipe.name %></h1> <h3><%= recipe.category %></h3> </div> <div> <h4><%= recipe.description %></h4> </div> </div> |
В обох випадках скомпільований HTML буде наступним:
<div class="category"> <div class="recipes"> <h1>Cookie</h1> <h3>Desserts</h3> </div> <div> <h4>Made from dough and sugar. Usually circular in shape and has about 400 calories.</h4> </div> </div>
Основні відмінності:
- В Haml немає закриття тегів, як у ERB
- Синтакс ERB дуже схожий на HTML, в той час як Haml більше схожий на CSS.
- Haml використовує відступи для створення структури елементів-тегів, а ERB має схожий на HTML синтаксис.
- Властивості Haml, такі як
class
іid
можна призначати за допомогою символів#
та.
відповідно. Також можна використовувати атрибутиclass
таid
, що не є необхідним. Haml також використовує символ%
, щоб відокремити елемент HTML замість кутових дужок<>
, як це робить ERB.
Приклад з вкрапленням Ruby
Це простий приклад коду, який, втім, може не відображати сучасну розмітку мови.
!!! %html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en"} %head %title BoBlog %meta{"http-equiv" => "Content-Type", :content => "text/html"; charset="utf-8"} %link{"rel" => "stylesheet", "href" => "main.css", "type" => "text/css"} %body #header %h1 BoBlog %h2 Bob's Blog #content - @entries.each do |entry| .entry %h3.title= entry.title %p.date= entry.posted.strftime("%A, %B %d, %Y") %p.body= entry.body #footer %p All content copyright © Bob
Цей код Haml буде інтерпретовано у наступний XHTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'> <head> <title>BoBlog</title> <meta content='text/html; charset=utf-8' http-equiv='Content-Type' /> <link href="/stylesheets/main.css" media="screen" rel="Stylesheet" type="text/css" /> </head> <body> <div id='header'> <h1>BoBlog</h1> <h2>Bob's Blog</h2> </div> <div id='content'> <div class='entry'> <h3 class='title'>Halloween</h3> <p class='date'>Tuesday, October 31, 2006</p> <p class='body'> Happy Halloween, glorious readers! I'm going to a party this evening... I'm very excited. </p> </div> <div class='entry'> <h3 class='title'>New Rails Templating Engine</h3> <p class='date'>Friday, August 11, 2006</p> <p class='body'> There's a very cool new Templating Engine out for Ruby on Rails. It's called Haml. </p> </div> </div> <div id='footer'> <p> All content copyright © Bob </p> </div> </body> </html>
Реалізація
Haml можна легко використовувати з іншими мовами. Нижче наведено список мов, в яких є можливість імплементації коду HAML:
- HamlPy (Python) [Архівовано 8 квітня 2016 у Wayback Machine.]
- LuaHaml (Lua) [Архівовано 10 червня 2018 у Wayback Machine.]
- MonoRail NHaml (ASP.NET)
- NHaml (.NET) [Архівовано 16 березня 2016 у Wayback Machine.]
- Fammel (PHP)
- HAML-TO-PHP (PHP5)
- pHAML (PHP) [Архівовано 10 червня 2017 у Wayback Machine.]
- phamlp (PHP) [Архівовано 3 квітня 2016 у Wayback Machine.]
- phpHaml (PHP5) [Архівовано 19 червня 2017 у Wayback Machine.]
- Multi target HAML (PHP5.3) [Архівовано 11 червня 2018 у Wayback Machine.]
- haml-js (JavaScript) [Архівовано 19 березня 2016 у Wayback Machine.]
- Text::Haml (Perl) [Архівовано 17 жовтня 2019 у Wayback Machine.]
- Scalate (Scala)
- JHaml (Java) [Архівовано 11 червня 2018 у Wayback Machine.]
- Hart (Dart) [Архівовано 10 червня 2018 у Wayback Machine.]
- cl-haml (Common Lisp) [Архівовано 11 червня 2018 у Wayback Machine.]
Див. також
- BBCode
- eRuby
- Markaby
- Ruby
- Ruby on Rails
- YAML
- Sass — схожа система для CSS.
- Вебшаблони − концепт шаблонів для розширення HTML
Додаткові матеріали
- Документація Haml [Архівовано 29 травня 2017 у Wayback Machine.]
- Основи Haml [Архівовано 23 квітня 2017 у Wayback Machine.]
Примітки
- ↑ MIT License. Процитовано 15 лютого 2016.
- ↑ а б GitHub. Архів оригіналу за 27 квітня 2017. Процитовано 30 січня 2016.
- ↑ Encoding. Архів оригіналу за 29 травня 2017. Процитовано 29 січня 2016.
- ↑ UTF encodings. Архів оригіналу за 16 лютого 2019. Процитовано 7 лютого 2016.
- ↑ а б в г History. Архів оригіналу за 27 травня 2017. Процитовано 29 січня 2016.
- ↑ а б Using Haml. Архів оригіналу за 29 травня 2017. Процитовано 7 лютого 2016.
Посилання
- Офіційний сайт Haml [Архівовано 12 травня 2019 у Wayback Machine.]
- Репозиторій Haml (Git) [Архівовано 28 січня 2016 у Wayback Machine.]
- phpHaml (робота Haml в PHP 5) [Архівовано 19 червня 2017 у Wayback Machine.]
- Haml в Google Group
- Презентація Haml версії 1.0 в блозі Ruby on Rails [Архівовано 19 травня 2017 у Wayback Machine.]
|
|
|
![]() | Це незавершена стаття про мови програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |