最近Hamlにハマっていて、ある程度覚えて使っていたのだけどつまづいた。以下の例を見てほしい。
<p>I eat well Milky Way recently.</p>
こんな感じで、要素を1行で吐き出したい時ってあると思うんだけど、これをHamlで書くと以下のようになる。
%p I eat well Milky Way recently.
%p<
I eat well Milky Way recently.
文章中にリンクが張ってあるのはよくある話で、「Milky Way」というテキストにリンクを張ってみる。
<p>I eat well <a href="http://www.milkywaybar.com/">Milky Way</a> recently.</p>
上記が出力される理想形。Hamlでやってみる。
%p<
I eat well
%a(href="http://www.milkywaybar.com/")> Milky Way
recently.
これで出力すると以下のようになる。
<p>I eat well<a href="http://www.milkywaybar.com/">Milky Way</a>recently.</p>
ない!「well」と「recently」の間にスペースがない!じゃあスペース入れてみようと思い、やってみた以下の書き方はすべてダメ。
- space = " "
%p<
I eat well#{space}
%a(href="http://www.milkywaybar.com/")> Milky Way
#{space}recently.
- space = "¥s"
%p<
I eat well#{space}
%a(href="http://www.milkywaybar.com/")> Milky Way
#{space}recently.
%p<
I eat well
= " "
%a(href="http://www.milkywaybar.com/")> Milky Way
= " "
recently.
%p<
I eat well
= "¥s"
%a(href="http://www.milkywaybar.com/")> Milky Way
= "¥s"
recently.
行頭と行末の半角スペースは無視されるようだ。正規表現もダメとは…。
というわけで、表示は変えずに「ソース上では1行で出力する」という要件を満たすためには、以下のようにやるしか方法が見つからなかった。
- space = " "
%p<
I eat well#{space}
%a(href="http://www.milkywaybar.com/")> Milky Way
#{space}recently.
%p<
I eat well
= " "
%a(href="http://www.milkywaybar.com/")> Milky Way
= " "
recently.
%p<
I eat well
%a(href="http://www.milkywaybar.com/")> Milky Way
recently.
こうすると以下のように出力されて、意図した表示になり、1行で出力される。
<p>I eat well <a href="http://www.milkywaybar.com/">Milky Way</a> recently.</p>
もうね、全然直感的じゃないし、「軽量マークアップ言語」とはなんだったのでしょう…。Markdownは直感的でメモ書きとかには超便利だと思うけど、要素の細かな指定は普通のHTMLと変わらないし、ならHTML書くときは普通にHTMLでいんじゃないかなぁと思った。
HamlはSassも中で書けるから、1つのファイルで全部1行で出力したらなんかいいなぁ(キャンペーンサイトとか1枚ペラのページ限定だけど)と思ったんだけど、compressedで吐き出す方法分からないし、とりあえず保留しておく。
あ、ちなみに例文の私が最近ミルキーウェイというお菓子に超ハマっているというのはマジです。
追記
@yoruakihttp://t.co/3Z1Yj3MYyX
だけど、link_toかsurround使うんじゃない?
— ながしまきょう (@hail2u_) 2014, 2月 28
か、神様…!
ちょっとlink_to
についてはよく分からなかったのだけど(Ruby on Railsかな)、surround
を使うことで解決できた。Module: Haml::Helpersを参考にした。
%p<
= surround "I eat well ", " recently." do
%a(href="http://www.milkywaybar.com/")> Milky Way
これで意図した表示になります。@Kyoさんありがとうございました。
Webってこういうのがいいんだよなぁと改めて思った次第です。