slim 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8b90e64b7eb12f2d3c66b7f1141a757d7314df8
4
- data.tar.gz: e695b95196c24065d593af6dbc2da8d122b6b0e1
3
+ metadata.gz: 58912f8464de3ff74107a9ded1bf191b976cb7b3
4
+ data.tar.gz: aaf442c2a361a88e18dea6622e79cd9184369ab8
5
5
  SHA512:
6
- metadata.gz: 43864aaeb0b17561f3a742be6a2324213be8aefa19ee751f7ded2fef9018effb46bc095a8f756af696eb2c835fb3035df33bbb254781e1ebcd52ac36aef20df4
7
- data.tar.gz: 5e9ca23904c3c810069605133d41e3770ab6b4349e926328b219c7b3ecf5da99b4a850a38064913082e8d2d4df2bf59e7016c790ae91f717b59e3af3f7a45a25
6
+ metadata.gz: 9c6b789d0f7d192a1edc2461a03cba9fde694498893514c51f91db6f21f1941f72c7ddc6ca2cd562bb013b2d217488b1264d1236956f44be7ec3c50c5802f012
7
+ data.tar.gz: 1975be4161db643822c4e3c3269725d32cc94d4e692b217d71cf69af0f82e1982dbf0ab0720763094799a8f9c3f1683dda0d41c0e98b083971a35e914d46d777
@@ -3,24 +3,25 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.3
5
5
  - 2.0.0
6
+ - 2.1.0
6
7
  - ruby-head
7
8
  - jruby-18mode
8
9
  - jruby-19mode
9
- - rbx-18mode
10
- - rbx-19mode
10
+ - rbx-2
11
11
  env:
12
12
  - "TASK=test:core_and_plugins TILT=master"
13
- - "TASK=test:core_and_plugins TILT=1.3.4"
13
+ - "TASK=test:core_and_plugins TILT=1.3.7"
14
14
  - "TASK=test:core_and_plugins TILT=1.4.1"
15
- - "TASK=test:core_and_plugins TILT=2.0.0.beta1"
15
+ - "TASK=test:core_and_plugins TILT=2.0.1"
16
16
  - "TASK=test:rails RAILS=master"
17
17
  - "TASK=test:rails RAILS=3.0.20"
18
- - "TASK=test:rails RAILS=3.1.12"
19
- - "TASK=test:rails RAILS=3.2.13"
20
- - "TASK=test:rails RAILS=4.0.0"
18
+ - "TASK=test:rails RAILS=3.1.12 TILT=1.3.4"
19
+ - "TASK=test:rails RAILS=3.2.17 TILT=1.3.4"
20
+ - "TASK=test:rails RAILS=4.0.4"
21
+ - "TASK=test:rails RAILS=4.1.0"
21
22
  - "TASK=test:sinatra SINATRA=master"
22
23
  - "TASK=test:sinatra SINATRA=1.3.6"
23
- - "TASK=test:sinatra SINATRA=1.4.2"
24
+ - "TASK=test:sinatra SINATRA=1.4.5"
24
25
  - "TASK=bench iterations=10000"
25
26
  - "TASK=bench slow=1 iterations=1000"
26
27
  matrix:
@@ -30,14 +31,16 @@ matrix:
30
31
  env: "TASK=test:rails RAILS=master"
31
32
  - rvm: jruby-18mode
32
33
  env: "TASK=test:rails RAILS=master"
33
- - rvm: rbx-18mode
34
+ - rvm: rbx-2
34
35
  env: "TASK=test:rails RAILS=master"
35
36
  - rvm: 1.8.7
36
- env: "TASK=test:rails RAILS=4.0.0"
37
+ env: "TASK=test:rails RAILS=4.0.4"
38
+ - rvm: 1.8.7
39
+ env: "TASK=test:rails RAILS=4.1.0"
40
+ - rvm: jruby-18mode
41
+ env: "TASK=test:rails RAILS=4.0.4"
37
42
  - rvm: jruby-18mode
38
- env: "TASK=test:rails RAILS=4.0.0"
39
- - rvm: rbx-18mode
40
- env: "TASK=test:rails RAILS=4.0.0"
43
+ env: "TASK=test:rails RAILS=4.1.0"
41
44
  allow_failures:
42
45
  - env: "TASK=test:core_and_plugins TILT=master"
43
46
  - env: "TASK=test:rails RAILS=master"
data/CHANGES CHANGED
@@ -1,3 +1,12 @@
1
+ 2.0.3
2
+
3
+ * slimrb: Don't update HTML output on exceptions
4
+ * Allow dashes at the beginning of class names (#474)
5
+ * Render empty attributes as standalone in html mode (#480)
6
+ * Fix #482: problem with whitespace modifier `tag=<`
7
+ * Fix #485: missing end for empty `if` control blocks
8
+ * Fix #510: double dash in class name
9
+
1
10
  2.0.2
2
11
 
3
12
  * Add option :attr_delims
data/Gemfile CHANGED
@@ -24,6 +24,13 @@ if ENV['RAILS']
24
24
  end
25
25
  end
26
26
 
27
+ #Choose minitest 4.7.x for sinatra or rails 3 and 4.0 otherwise go for newer version
28
+ if ENV['SINATRA'] || (ENV['RAILS'] && !ENV['RAILS'].match(/4\.([1-9])(\..*)?/))
29
+ gem 'minitest', '~> 4.7.4'
30
+ else
31
+ gem 'minitest', '~> 5.1'
32
+ end
33
+
27
34
  if ENV['SINATRA']
28
35
  gem 'rack-test'
29
36
  if ENV['SINATRA'] == 'master'
@@ -40,9 +47,8 @@ gem 'creole'
40
47
  gem 'builder'
41
48
  gem 'asciidoctor'
42
49
  gem 'org-ruby'
43
- gem 'minitest', '~> 4.7.4'
44
50
 
45
51
  if ENV['TASK'] == 'bench'
46
52
  gem 'erubis'
47
53
  gem 'haml'
48
- end
54
+ end
@@ -0,0 +1,968 @@
1
+ # Slim
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/slim.png)](http://rubygems.org/gems/slim) [![Build Status](https://secure.travis-ci.org/slim-template/slim.png?branch=master)](http://travis-ci.org/slim-template/slim) [![Dependency Status](https://gemnasium.com/slim-template/slim.png?travis)](https://gemnasium.com/slim-template/slim) [![Code Climate](https://codeclimate.com/github/slim-template/slim.png)](https://codeclimate.com/github/slim-template/slim) [![Gittip donate button](http://img.shields.io/gittip/bevry.png)](https://www.gittip.com/min4d/ "Donate weekly to this project using Gittip")
4
+ [![Flattr donate button](https://raw.github.com/balupton/flattr-buttons/master/badge-89x18.gif)](https://flattr.com/submit/auto?user_id=min4d&url=http%3A%2F%2Fslim-lang.org%2F "Donate monthly to this project using Flattr")
5
+
6
+ Slim は 不可解にならないように view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。標準的な HTML テンプレートからどれだけのものが削除できるか確かめるところから始まりました。(<, >, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能性は発展し, 柔軟な構文をもたらしました。
7
+
8
+ 機能の短いリスト
9
+
10
+ * すっきりした構文
11
+ * 閉じタグの無い短い構文 (代わりにインデントを用いる)
12
+ * 閉じタグを用いた HTML 形式の構文
13
+ * 設定可能なショートカットタグ (デフォルトでは `#` は `<div id="...">` に, `.` は `<div class="...">` に)
14
+ * 安全性
15
+ * デフォルトで自動 HTML エスケープ
16
+ * Rails の `html_safe?` に対応
17
+ * プラグインを用いた柔軟な設定と拡張性
18
+ * Mustache のようなロジックレスモードをプラグインで実現
19
+ * 多言語化/I18n をプラグインで実現
20
+ * 高性能
21
+ * ERB/Erubis に匹敵するスピード
22
+ * Rails のストリーミングに対応
23
+ * 全てのメジャーフレームワークが対応 (Rails, Sinatra, ...)
24
+ * Ruby 1.9 では タグや属性の Unicode に完全対応
25
+ * Markdown や Textile のような埋め込みエンジン
26
+
27
+ ## リンク
28
+
29
+ * ソース: <http://github.com/slim-template/slim>
30
+ * バグ: <http://github.com/slim-template/slim/issues>
31
+ * リスト: <http://groups.google.com/group/slim-template>
32
+ * API ドキュメント:
33
+ * 最新の Gem: <http://rubydoc.info/gems/slim/frames>
34
+ * GitHub master: <http://rubydoc.info/github/slim-template/slim/master/frames>
35
+
36
+ ## イントロダクション
37
+
38
+ ### Slim とは?
39
+
40
+ Slim は __Rails3 および 4__ に対応した高速, 軽量なテンプレートエンジンです。すべての主要な Ruby の実装でしっかりテストされています。
41
+ 私たちは継続的インテグレーションを採用しています。(travis-ci)
42
+
43
+ Slim の核となる構文は1つの考えによって導かれます: "この動作を行うために最低限必要なものは何か"。
44
+
45
+ 多くの人々の Slim への貢献によって, 彼らが使う [Haml](https://github.com/haml/haml) や [Jade](https://github.com/visionmedia/jade) の影響を受け構文の追加が行われています。 Slim の開発チームは美は見る人の目の中にあることを分っているのでこういった追加にオープンです。
46
+
47
+ Slim は 構文解析/コンパイルに [Temple](https://github.com/judofyr/temple) を使い [Tilt](https://github.com/rtomayko/tilt) に組み込まれます。これにより [Sinatra](https://github.com/sinatra/sinatra) やプレーンな [Rack](https://github.com/rack/rack) とも一緒に使えます。
48
+
49
+ Temple のアーキテクチャはとても柔軟でモンキーパッチなしで構文解析とコンパイルのプロセスの拡張を可能にします。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに
50
+ 使用されます。
51
+
52
+ ### なぜ Slim を使うのか?
53
+
54
+ Rails コミュニティの中で, _Erb_ と _Haml_ は間違いなく最も人気がある2つのテンプレートエンジンです。しかしながら, _Erb_ の構文は扱いにくく, _Haml_ の構文は初心者にはとても謎めいている場合があります。
55
+
56
+ ロジックレスエンジンのいくつかの発展もあります (例: 標準のHTMLを書かなければいけない [Mustache](https://github.com/defunkt/mustache))。あなたの好みで Slim の構文で HTML をビルドすることができます。Slim の構文で HTML をビルドすることが好きだけどテンプレートに Ruby のコードを書きたくない場合でも Slim のロジックレスモードを使うことができます。
57
+
58
+ Slim は 最小限の構文とスピードをもたらすために生まれました。 もし Slim を選択しない場合, その理由はスピード以外の理由によるものでしょう。
59
+
60
+ ___そう, Slim は速い!___ ベンチマークはコミット毎に <http://travis-ci.org/slim-template/slim> で取られています。
61
+ この数字が信じられませんか? それは仕方ないことです。是非 rake タスクを使って自分でベンチマークを取ってみてください!
62
+
63
+ ### どう始めるの?
64
+
65
+ Slim を gem としてインストール:
66
+
67
+ gem install slim
68
+
69
+ あなたの Gemfile に `gem 'slim'` と書いてインクルードするか, ファイルに `require 'slim'` と書く必要があります。これだけです! 後は拡張子に .slim を使うだけで準備はできています。
70
+
71
+ ### 構文例
72
+
73
+ Slim テンプレートがどのようなものか簡単な例を示します:
74
+
75
+ doctype html
76
+ html
77
+ head
78
+ title Slim のファイル例
79
+ meta name="keywords" content="template language"
80
+ meta name="author" content=author
81
+ link rel="icon" type="image/png" href=file_path("favicon.png")
82
+ javascript:
83
+ alert('Slim は javascript の埋め込みに対応します!')
84
+
85
+ body
86
+ h1 マークアップ例
87
+
88
+ #content
89
+ p このマークアップ例はあなたに Slim の典型的なファイルがどのようなものか示します。
90
+
91
+ == yield
92
+
93
+ - if items.any?
94
+ table#items
95
+ - for item in items
96
+ tr
97
+ td.name = item.name
98
+ td.price = item.price
99
+ - else
100
+ p アイテムが見つかりませんでした。いくつか目録を追加してください。
101
+ ありがとう!
102
+
103
+ div id="footer"
104
+ == render 'footer'
105
+ | Copyright &copy; #{@year} #{@author}
106
+
107
+ インデントについて, インデントの深さはあなたの好みで選択できます。もし最初のインデントをスペース2つ, その次に5スペースを使いたい場合, それはあなたの選択次第です。マークアップを入れ子にするにはスペース1つのインデントが必要なだけです。
108
+
109
+ ## ラインインジケータ
110
+
111
+ ### テキスト `|`
112
+
113
+ パイプは Slim に行をコピーしろと命じます。基本的にどのような処理でもエスケープします。
114
+ パイプよりも深くインデントされた各行がコピーされます。
115
+
116
+ body
117
+ p
118
+ |
119
+ これはテキストブロックのテストです。
120
+
121
+ 構文解析結果は以下:
122
+
123
+ <body><p>これはテキストブロックのテストです。</p></body>
124
+
125
+ ブロックの左端はパイプ +1 スペースのインデントに設定されています。
126
+ 追加のスペースはコピーされます。
127
+
128
+ body
129
+ p
130
+ | この行は左端になります。
131
+ この行はスペース1つを持つことになります。
132
+ この行はスペース2つを持つことになります。
133
+ 以下同様に...
134
+
135
+ テキスト行に HTML を埋め込むこともできます。
136
+
137
+ - articles.each do |a|
138
+ | <tr><td>#{a.name}</td><td>#{a.description}</td></tr>
139
+
140
+ ### テキスト行のスペースをたどる `'`
141
+
142
+ シングルクォートは Slim に行をコピーしろと命じます (`|` と同様に) が, 単一行の末尾にスペースが追加されているかチェックします。
143
+
144
+ ### インライン html `<` (HTML 形式)
145
+
146
+ あなたは html タグを直接 Slim の中に書くことができます。Slim は閉じタグを使った html タグ形式や html と Slim を混ぜてテンプレートの中に書くことができます。
147
+
148
+ <html>
149
+ head
150
+ title 記述例
151
+ <body>
152
+ - if articles.empty?
153
+ - else
154
+ table
155
+ - articles.each do |a|
156
+ <tr><td>#{a.name}</td><td>#{a.description}</td></tr>
157
+ </body>
158
+ </html>
159
+
160
+ ### 制御コード `-`
161
+
162
+ ダッシュは制御コードを意味します。制御コードの例としてループと条件文があります。`end` は `-` の後ろに置くことができません。ブロックはインデントによってのみ定義されます。
163
+ 複数行にわたる Ruby のコードが必要な場合, 行末にバックスラッシュ `\` を追加します。行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。
164
+
165
+ body
166
+ - if articles.empty?
167
+ | 在庫なし
168
+
169
+ ### 出力 `=`
170
+
171
+ イコールはバッファに追加する出力を生成する Ruby 呼び出しを Slim に命令します。Ruby のコードが複数行にわたる場合, 例のように行末にバックスラッシュを追加します。
172
+
173
+ = javascript_include_tag \
174
+ "jquery",
175
+ "application"
176
+
177
+ 行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。行末スペースを追加するために修飾子の `>` や `<` もサポートします。
178
+
179
+ * `=>` は末尾のスペースを伴った出力をします。 末尾のスペースが追加されることを除いて, 単一の等合 (`=`) と同じです。古い構文の `='` も同様にサポートされます。
180
+ * `=<` は先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 単一の等号 (`=`) と同じです。
181
+
182
+ ### HTML エスケープを伴わない出力 `==`
183
+
184
+ 単一のイコール (`=`) と同じですが, `escape_html` メソッドを経由しません。 末尾や先頭のスペースを追加するための修飾子 `>` と `<` はサポートされています。
185
+
186
+ * `==>` は HTML エスケープを行わず末尾のスペースを伴った出力をします。末尾のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。 古い構文の `=='` もサポートされます。
187
+ * `==<` は HTML エスケープを行わず先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。
188
+
189
+ ### コードコメント `/`
190
+
191
+ コードコメントにはスラッシュを使います。スラッシュ以降は最終的なレンダリング結果に表示されません。コードコメントには `/` を, html コメントには `/!` を使います。
192
+
193
+ body
194
+ p
195
+ / この行は表示されません。
196
+ この行も表示されません。
197
+ /! html コメントとして表示されます。
198
+
199
+ 構文解析結果は以下:
200
+
201
+ <body><p><!--html コメントとして表示されます。--></p></body>
202
+
203
+ ### HTML コメント `/!`
204
+
205
+ html コメントにはスラッシュの直後にエクスクラメーションマークを使います (`<!-- ... -->`)。
206
+
207
+ ### IE コンディショナルコメント `/[...]`
208
+
209
+ /[if IE]
210
+ p もっと良いブラウザを使ってください。
211
+
212
+ レンダリング結果
213
+
214
+ <!--[if IE]><p>もっと良いブラウザを使ってください。</p><![endif]-->
215
+
216
+ ## HTML タグ
217
+
218
+ ### ドキュメントタイプタグ
219
+
220
+ ドキュメントタイプタグはとても簡単な方法で複雑なドキュメントタイプを生成するために使われる特別なタグです。
221
+
222
+ XML 宣言
223
+
224
+ doctype xml
225
+ <?xml version="1.0" encoding="utf-8" ?>
226
+
227
+ doctype xml ISO-8859-1
228
+ <?xml version="1.0" encoding="iso-8859-1" ?>
229
+
230
+ XHTML ドキュメントタイプ
231
+
232
+ doctype html
233
+ <!DOCTYPE html>
234
+
235
+ doctype 5
236
+ <!DOCTYPE html>
237
+
238
+ doctype 1.1
239
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
240
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
241
+
242
+ doctype strict
243
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
244
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
245
+
246
+ doctype frameset
247
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
248
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
249
+
250
+ doctype mobile
251
+ <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
252
+ "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
253
+
254
+ doctype basic
255
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
256
+ "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
257
+
258
+ doctype transitional
259
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
260
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
261
+
262
+ HTML 4 ドキュメントタイプ
263
+
264
+ doctype strict
265
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
266
+ "http://www.w3.org/TR/html4/strict.dtd">
267
+
268
+ doctype frameset
269
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
270
+ "http://www.w3.org/TR/html4/frameset.dtd">
271
+
272
+ doctype transitional
273
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
274
+ "http://www.w3.org/TR/html4/loose.dtd">
275
+
276
+ ### 閉じタグ (末尾 `/`)
277
+
278
+ 末尾に `/` を付けることで明示的にタグを閉じることができます。
279
+
280
+ img src="image.png"/
281
+
282
+ (注) 標準的な html タグ (img, br, ...) は自動的にタグを閉じるので,
283
+ 通常必要ありません。
284
+
285
+ ### スペースを追加する (`<`, `>`)
286
+
287
+ a タグの後に > を追加することで末尾にスペースを追加するよう Slim に強制することができます。
288
+
289
+ a> href='url1' Link1
290
+ a> href='url2' Link2
291
+
292
+ < を追加することで先頭のスペースを追加できます。
293
+
294
+ a< href='url1' Link1
295
+ a< href='url2' Link2
296
+
297
+ これらを組み合わせて使うこともできます。
298
+
299
+ a<> href='url1' Link1
300
+
301
+ ### インラインタグ
302
+
303
+ 時々タグをよりコンパクトにインラインにしたくなるかもしれません。
304
+
305
+ ul
306
+ li.first: a href="/a" A リンク
307
+ li: a href="/b" B リンク
308
+
309
+ 読みやすくするために, 属性を囲むことができるのを忘れないでください。
310
+
311
+ ul
312
+ li.first: a[href="/a"] A リンク
313
+ li: a[href="/b"] B リンク
314
+
315
+ ### テキストコンテンツ
316
+
317
+ タグと同じ行で開始するか
318
+
319
+ body
320
+ h1 id="headline" 私のサイトへようこそ。
321
+
322
+ 入れ子にするのかどちらかです。エスケープ処理を行うためにはパイプかバッククォートを使わなければなりません。
323
+
324
+ body
325
+ h1 id="headline"
326
+ | 私のサイトへようこそ。
327
+
328
+ ### 動的コンテンツ (`=` と `==`)
329
+
330
+ 同じ行で呼び出すか
331
+
332
+ body
333
+ h1 id="headline" = page_headline
334
+
335
+ 入れ子にすることができます。
336
+
337
+ body
338
+ h1 id="headline"
339
+ = page_headline
340
+
341
+ ### 属性
342
+
343
+ タグの後に直接属性を書きます。属性のテキストにはダブルクォート `"` か シングルクォート `'` を使わなければなりません (引用符で囲まれた属性)。
344
+
345
+ a href="http://slim-lang.com" title='Slim のホームページ' Slim のホームページへ
346
+
347
+ 引用符で囲まれたテキストを属性として使えます。
348
+
349
+ #### 属性の囲み
350
+
351
+ 区切り文字が構文を読みやすくするのであれば,
352
+ `{...}`, `(...)`, `[...]` が属性の囲みに使えます。
353
+ これらの記号は設定できます (`:attr_delims` オプション参照)。
354
+
355
+ body
356
+ h1(id="logo") = page_logo
357
+ h2[id="tagline" class="small tagline"] = page_tagline
358
+
359
+ 属性を囲んだ場合, 属性を複数行にわたって書くことができます:
360
+
361
+ h2[id="tagline"
362
+ class="small tagline"] = page_tagline
363
+
364
+ 属性の囲みや変数まわりにスペースを使うことができます:
365
+
366
+ h1 id = "logo" = page_logo
367
+ h2 [ id = "tagline" ] = page_tagline
368
+
369
+ #### 引用符で囲まれた属性
370
+
371
+ 例:
372
+
373
+ a href="http://slim-lang.com" title='Slim のホームページ' Slim のホームページへ
374
+
375
+ 引用符で囲まれたテキストを属性として使えます:
376
+
377
+ a href="http://#{url}" #{url} へ
378
+
379
+ 属性値はデフォルトでエスケープされます。属性のエスケープを無効にしたい場合 == を使います。
380
+
381
+ a href=="&amp;"
382
+
383
+ 引用符で囲まれた属性をバックスラッシュ `\` で改行できます。
384
+
385
+ a data-title="help" data-content="極めて長い長い長いヘルプテキストで\
386
+ 1つずつ1つずつその後はまたやり直して繰り返し...."
387
+
388
+ #### Ruby コードを用いた属性
389
+
390
+ `=` の後に直接 Ruby コードを書きます。コードにスペースが含まれる場合,
391
+ `(...)` の括弧でコードを囲まなければなりません。ハッシュを `{...}` に, 配列を `[...]` に書くこともできます。
392
+
393
+ body
394
+ table
395
+ - for user in users
396
+ td id="user_#{user.id}" class=user.role
397
+ a href=user_action(user, :edit) Edit #{user.name}
398
+ a href=(path_to_user user) = user.name
399
+
400
+ 属性値はデフォルトでエスケープされます。属性のエスケープを無効にしたい場合 == を使います。
401
+
402
+ a href==action_path(:start)
403
+
404
+ Ruby コードの属性は, コントロールセクションにあるようにバックスラッシュ `\` や `,` を用いて改行できます。
405
+
406
+ #### 真偽値属性
407
+
408
+ 属性値の `true`, `false` や `nil` は真偽値として
409
+ 評価されます。属性を括弧で囲む場合, 属性値の指定を省略することができます。
410
+
411
+ input type="text" disabled="disabled"
412
+ input type="text" disabled=true
413
+ input(type="text" disabled)
414
+
415
+ input type="text"
416
+ input type="text" disabled=false
417
+ input type="text" disabled=nil
418
+
419
+ #### 属性の結合
420
+
421
+ 複数の属性が与えられた場合に属性をまとめるように設定することができます (`:merge_attrs` 参照)。デフォルト設定では
422
+ class 属性は空白区切りで結合されます。
423
+
424
+ a.menu class="highlight" href="http://slim-lang.com/" Slim-lang.com
425
+
426
+ レンダリング結果
427
+
428
+ <a class="menu highlight" href="http://slim-lang.com/">Slim-lang.com</a>
429
+
430
+ また, `Array` や配列要素を属性値として区切り文字で結合し使うこともできます。
431
+
432
+ a class=["menu","highlight"]
433
+ a class=:menu,:highlight
434
+
435
+ #### アスタリスク属性 `*`
436
+
437
+ アスタリスクによってハッシュを属性/値のペアとして使うことができます。
438
+
439
+ .card*{'data-url'=>place_path(place), 'data-id'=>place.id} = place.name
440
+
441
+ レンダリング結果
442
+
443
+ <div class="card" data-id="1234" data-url="/place/1234">Slim の家</div>
444
+
445
+ 次のようにハッシュを返すメソッドやインスタンス変数を使うこともできます"
446
+
447
+ .card *method_which_returns_hash = place.name
448
+ .card *@hash_instance_variable = place.name
449
+
450
+ 属性の結合 (Slim オプション `:merge_attrs` 参照) に対応するハッシュ属性には `Array` を与えることもできます。
451
+
452
+ .first *{:class => [:second, :third]} テキスト
453
+
454
+ レンダリング結果
455
+
456
+ div class="first second third"
457
+
458
+ #### 動的タグ `*`
459
+
460
+ アスタリスク属性を使用することで完全に動的なタグを作ることができます。:tag をキーにもつハッシュを返すメソッドを
461
+ 作るだけです。
462
+
463
+ ruby:
464
+ def a_unless_current
465
+ @page_current ? {:tag => 'span'} : {:tag => 'a', :href => 'http://slim-lang.com/'}
466
+ end
467
+ - @page_current = true
468
+ *a_unless_current リンク
469
+ - @page_current = false
470
+ *a_unless_current リンク
471
+
472
+ レンダリング結果
473
+
474
+ <span>リンク</span><a href="http://slim-lang.com/">リンク</a>
475
+
476
+ ### ショートカット
477
+
478
+ #### タグショートカット
479
+
480
+ `:shortcut` オプションを設定することで独自のタグショートカットを定義できます。
481
+
482
+ Slim::Engine.set_default_options :shortcut => {'c' => {:tag => 'container'}, '#' => {:attr => 'id'}, '.' => {:attr => 'class'} }
483
+
484
+ Slim コードの中でこの様に使用できます。
485
+
486
+ c.content テキスト
487
+
488
+ レンダリング結果
489
+
490
+ <container class="content">テキスト</container>
491
+
492
+ #### 属性のショートカット
493
+
494
+ カスタムショートカットを定義することができます (`#` が id で `.` が class であるように)。
495
+
496
+ 例として `&` で作った type 属性付きの input 要素のショートカットを作成し追加します。
497
+
498
+ Slim::Engine.set_default_options :shortcut => {'&' => {:tag => 'input', :attr => 'type'}, '#' => {:attr => 'id'}, '.' => {:attr => 'class'}}
499
+
500
+ Slim コードの中でこの様に使用できます。
501
+
502
+ &text name="user"
503
+ &password name="pw"
504
+ &submit
505
+
506
+ レンダリング結果
507
+
508
+ <input type="text" name="user" />
509
+ <input type="password" name="pw" />
510
+ <input type="submit" />
511
+
512
+ 別の例として `@` で作った role 属性のショートカットを作成し追加します。
513
+
514
+ Slim::Engine.set_default_options :shortcut => {'@' => 'role', '#' => 'id', '.' => 'class'}
515
+
516
+ Slim コードの中でこの様に使用できます。
517
+
518
+ .person@admin = person.name
519
+
520
+ レンダリング結果
521
+
522
+ <div class="person" role="admin">Daniel</div>
523
+
524
+ 1つのショートカットを使って複数の属性を設定することもできます。
525
+
526
+ Slim::Engine.set_default_options :shortcut => {'@' => {:attr => %w(data-role role)}}
527
+
528
+ Slim の中で次のように使用し
529
+
530
+ .person@admin = person.name
531
+
532
+ このようのレンダリングされます。
533
+
534
+ <div class="person" role="admin" data-role="admin">Daniel</div>
535
+
536
+ #### ID ショートカット `#` と class ショートカット `.`
537
+
538
+ Haml と同じように, `id` と `class` の属性を次のショートカットで指定できます。
539
+
540
+ body
541
+ h1#headline
542
+ = page_headline
543
+ h2#tagline.small.tagline
544
+ = page_tagline
545
+ .content
546
+ = show_content
547
+
548
+ これは次に同じです
549
+
550
+ body
551
+ h1 id="headline"
552
+ = page_headline
553
+ h2 id="tagline" class="small tagline"
554
+ = page_tagline
555
+ div class="content"
556
+ = show_content
557
+
558
+ ## ヘルパ, キャプチャとインクルード
559
+
560
+ いくつかのヘルパを使用してテンプレートを拡張することもできます。次のヘルパが定義されていることを前提として,
561
+
562
+ ~~~ruby
563
+ module Helpers
564
+ def headline(&block)
565
+ if defined?(::Rails)
566
+ # Rails の場合には capture メソッドを使う
567
+ "<h1>#{capture(&block)}</h1>"
568
+ else
569
+ # フレームワークなしで Slim を使う場合(Tilt の場合),
570
+ # ただ出力する
571
+ "<h1>#{yield}</h1>"
572
+ end
573
+ end
574
+ end
575
+ ~~~
576
+
577
+ このインクルードされたコードのスコープは実行される Slim のテンプレートコードです。Slim テンプレートの中では次のように使用することができます。
578
+
579
+ p
580
+ = headline do
581
+ ' Hello
582
+ = user.name
583
+
584
+ `do` ブロック内のコンテンツが自動的にキャプチャされ `yield` を通してヘルパに渡されます。糖衣構文として
585
+ `do` キーワードを省略して書くこともできます。
586
+
587
+ p
588
+ = headline
589
+ ' Hello
590
+ = user.name
591
+
592
+ これまで幾度となく Slim にサブテンプレートのインクルードがリクエストされてきました。今ではコア機能として実装されなくとも
593
+ 簡単に独自のヘルパを書いて使用することができます。このインクルードは実行時に行われます。
594
+
595
+ ~~~ruby
596
+ module Helpers
597
+ def include_slim(name, options = {}, &block)
598
+ Slim::Template.new("#{name}.slim", options).render(self, &block)
599
+ end
600
+ end
601
+ ~~~
602
+
603
+ このヘルパは次のように使用できます
604
+
605
+ nav= include_slim 'menu'
606
+ section= include_slim 'content'
607
+
608
+ しかし, このヘルパはキャッシュを行いません。その為, 目的にあったよりインテリジェントなバージョンを
609
+ 実装する必要があります。また, ほとんどのフレームワークにはすでに同様のヘルパが含まれるので注意してください。(例: Rails の `render` メソッド)
610
+
611
+ ## テキストの展開
612
+
613
+ Ruby の標準的な展開方法を使用します。テキストはデフォルトで html エスケープされます。
614
+
615
+ body
616
+ h1 ようこそ #{current_user.name} ショーへ。
617
+ | エスケープしない #{{content}} こともできます。
618
+
619
+ 展開したテキストのエスケープ方法 (言い換えればそのままのレンダリング)
620
+
621
+ body
622
+ h1 ようこそ \#{current_user.name} ショーへ。
623
+
624
+ ## 埋め込みエンジン (Markdown, ...)
625
+
626
+ ありがとう [Tilt](https://github.com/rtomayko/tilt), Slim は他のテンプレートエンジンの埋め込みに見事に対応します。
627
+
628
+ 例:
629
+
630
+ coffee:
631
+ square = (x) -> x * x
632
+
633
+ markdown:
634
+ #Header
635
+ #{"Markdown"} からこんにちわ!
636
+ 2行目!
637
+
638
+ 対応エンジン:
639
+
640
+ | フィルタ | 必要な gems | 種類 | 説明 |
641
+ | -------- | ----------- | ---- | ----------- |
642
+ | ruby: | なし | ショートカット | Ruby コードを埋め込むショートカット |
643
+ | javascript: | なし | ショートカット | javascript コードを埋め込むショートカットで script タグで囲む |
644
+ | css: | なし | ショートカット | css コードを埋め込むショートカットで style タグで囲む |
645
+ | sass: | sass | コンパイル時 | sass コードを埋め込むショートカットで style タグで囲む |
646
+ | scss: | sass | コンパイル時 | scss コードを埋め込むショートカットで style タグで囲む |
647
+ | less: | less | コンパイル時 | less コードを埋め込むショートカットで style タグで囲む |
648
+ | styl: | styl | コンパイル時 | stylus コードを埋め込むショートカットで style タグで囲む |
649
+ | coffee: | coffee-script | コンパイル時 | コンパイルした CoffeeScript で script タグで囲む |
650
+ | asciidoc: | asciidoctor | コンパイル時 + 展開 | AsciiDoc コードのコンパイルとテキスト中の # \{variables} の展開 |
651
+ | markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdownのコンパイルとテキスト中の # \{variables} の展開 |
652
+ | textile: | redcloth | コンパイル時 + 展開 | textile のコンパイルとテキスト中の # \{variables} の展開 |
653
+ | creole: | creole | コンパイル時 + 展開 | cleole のコンパイルとテキスト中の # \{variables} の展開 |
654
+ | wiki:, mediawiki: | wikicloth | コンパイル時 + 展開 | wiki のコンパイルとテキスト中の # \{variables} の展開 |
655
+ | rdoc: | rdoc | コンパイル時 + 展開 | RDoc のコンパイルとテキスト中の # \{variables} の展開 |
656
+ | builder: | builder | プレコンパイル | builder コードの埋め込み |
657
+ | nokogiri: | nokogiri | プレコンパイル | nokogiri コードの埋め込み |
658
+ | erb: | なし | プレコンパイル | erb コードの埋め込み |
659
+
660
+ 埋め込みエンジンは Slim の `Slim::Embedded` フィルタのオプションで直接設定されます。例:
661
+
662
+ Slim::Embedded.default_options[:markdown] = {:auto_ids => false}
663
+
664
+ ## Slim の設定
665
+
666
+ Slim とその基礎となる [Temple](https://github.com/judofyr/temple) は非常に柔軟に設定可能です。
667
+ Slim を設定する方法はコンパイル機構に少し依存します。(Rails や [Tilt](https://github.com/rtomayko/tilt))。デフォルトオプションの設定は `Slim::Engine` クラスでいつでも可能です。Rails の 環境設定ファイルで設定可能です。例えば, config/environments/developers.rb で設定したいとします:
668
+
669
+ ### デフォルトオプション
670
+
671
+ # デバック用に html をきれいにインデントし属性をソートしない (Ruby 1.8)
672
+ Slim::Engine.set_default_options :pretty => true. :sort_attrs => false
673
+
674
+ # デバック用に html をきれいにインデントし属性をソートしない (Ruby 1.9)
675
+ Slim::Engine.set_default_options pretty: true, sort_attrs: false
676
+
677
+ ハッシュで直接オプションにアクセスすることもできます:
678
+
679
+ Slim::Engine.default_options[:pretty] = true
680
+
681
+ ### 実行時のオプション設定
682
+
683
+ 実行時のオプション設定の方法は2つあります。Tilt テンプレート (`Slim::Template`) の場合, テンプレートを
684
+ インスタンス化する時にオプションを設定できます。
685
+
686
+ Slim::Template.new('template.slim', optional_option_hash).render(scope)
687
+
688
+ 他の方法は Rails に主に関係がありますがスレッド毎にオプション設定を行う方法です:
689
+
690
+ Slim::Engine.with_options(option_hash) do
691
+ # ここで作成される Slim エンジンは option_hash を使用します
692
+ # Rails での使用例:
693
+ render :page, :layout => true
694
+ end
695
+
696
+ Rails ではコンパイルされたテンプレートエンジンのコードとオプションはテンプレート毎にキャッシュされ, 後でオプションを変更できないことに注意する必要があります。
697
+
698
+ # 最初のレンダリング呼び出し
699
+ Slim::Engine.with_options(:pretty => true) do
700
+ render :page, :layout => true
701
+ end
702
+
703
+ # 2回目のレンダリング呼び出し
704
+ Slim::Engine.with_options(:pretty => false) do
705
+ render :page, :layout => true # :pretty is still true because it is cached
706
+ end
707
+
708
+ ### 可能なオプション
709
+
710
+ 次のオプションが `Slim::Engine` によって用意され `Slim::Engine.set_default_options` で設定することができます。
711
+ 沢山ありますが良いことに, Slim はもし誤った設定キーを使用しようとした場合キーをチェックしエラーを報告します。
712
+
713
+ | 種類 | 名前 | デフォルト | 用途 |
714
+ | ---- | ---- | ---------- | ---- |
715
+ | 文字列 | :file | nil | 解析対象のファイル名ですが, Slim::Template によって自動的に設定されます |
716
+ | 数値 | :tabsize | 4 | 1 タブあたりのスペース数 (構文解析で利用されます) |
717
+ | 文字列 | :encoding | "utf-8" | テンプレートのエンコーディングを設定 |
718
+ | 文字列 | :default_tag | "div" | タグ名が省略されている場合デフォルトのタグとして使用される |
719
+ | ハッシュ | :shortcut | \{'.' => {:attr => 'class'}, '#' => {:attr => 'id'}} | 属性のショートカット |
720
+ | Hash | :attr_delims | \{'(' => ')', '[' => ']', '{' => '}'} | 属性区切り文字 |
721
+ | 配列&lt;シンボル,文字列&gt; | :enable_engines | nil <i>(すべて可)</i> | 有効な埋め込みエンジンリスト (ホワイトリスト) |
722
+ | 配列&lt;シンボル,文字列&gt; | :disable_engines | nil <i>(無効なし)</i> | 無効な埋め込みエンジンリスト (ブラックリスト) |
723
+ | 真偽値 | :disable_capture | false (Rails では true) | ブロック内キャプチャ無効 (ブロックはデフォルトのバッファに書き込む) |
724
+ | 真偽値 | :disable_escape | false | 文字列の自動エスケープ無効 |
725
+ | 真偽値 | :use_html_safe | false (Rails では true) | ActiveSupport の String# html_safe? を使う (:disable_escape と一緒に機能する) |
726
+ | シンボル | :format | :xhtml | html の出力フォーマット (対応フォーマット :xhtml, :html4, :html5, :html) |
727
+ | 文字列 | :attr_quote | '"' | html の属性を囲む文字 (' または " が可能) |
728
+ | ハッシュ | :merge_attrs | \{'class' => ' '} | 複数の html 属性が与えられた場合結合に使われる文字列 (例: class="class1 class2") |
729
+ | 配列&lt;文字列&gt; | :hyphen_attrs | %w(data) | 属性にハッシュが与えられた場合ハイフンつなぎされます。(例: data={a:1, b:2} は data-a="1" data-b="2" のように) |
730
+ | 真偽値 | :sort_attrs | true | 名前によって属性をソート |
731
+ | シンボル | :js_wrapper | nil | :comment, :cdata や :both で JavaScript をラップします。:guess を指定することで :format オプションに基いて設定することもできます |
732
+ | 真偽値 | :pretty | false | 綺麗な html インデント <b>(遅くなります!)</b> |
733
+ | 文字列 | :indent | ' ' | インデントに使用される文字列 |
734
+ | 真偽値 | :streaming | false (Rails > 3.1 では true) | ストリーミング出力の有効化 |
735
+ | Class | :generator | Temple::Generators::ArrayBuffer/ RailsOutputBuffer | Temple コードジェネレータ (デフォルトのジェネレータは配列バッファを生成します) |
736
+ | 文字列 | :buffer | '_buf' (Rails では '@output_buffer') | バッファに使用される変数 |
737
+
738
+ Temple フィルタによってもっと多くのオプションがサポートされていますが一覧には載せず公式にはサポートしません。
739
+ Slim と Temple のコードを確認しなければなりません。
740
+
741
+ ### オプションの優先順位と継承
742
+
743
+ Slim や Temple のアーキテクチャについてよく知っている開発者は異なる場所で設定を
744
+ 上書きすることができます。 Temple はサブクラスがスーパークラスのオプションを上書きできるように
745
+ 継承メカニズムを採用しています。オプションの優先順位は次のとおりです:
746
+
747
+ 1. `Slim::Template` オプションはエンジン初期化時に適用されます
748
+ 2. `Slim::Template.default_options`
749
+ 3. `Slim::Engine.thread_options`, `Slim::Engine.default_options`
750
+ 5. パーサ/フィルタ/ジェネレータ `thread_options`, `default_options` (例: `Slim::Parser`, `Slim::Compiler`)
751
+
752
+ `Temple::Engine` のようにスーパークラスのオプションを設定することも可能です。しかしこれはすべての Temple テンプレートエンジンに影響します。
753
+
754
+ Slim::Engine < Temple::Engine
755
+ Slim::Compiler < Temple::Filter
756
+
757
+ ## プラグイン
758
+
759
+ Slim はロジックレスモードと I18n プラグインを提供しています。プラグインのドキュメントを確認してください。
760
+
761
+ * [ロジックレスモード](doc/logic_less.md)
762
+ * [多言語化/I18n](doc/translator.md)
763
+
764
+ ## フレームワークサポート
765
+
766
+ ### Tilt
767
+
768
+ Slim は生成されたコードをコンパイルするために [Tilt](https://github.com/rtomayko/tilt) を使用します。Slim テンプレートを直接使いたい場合, Tilt インターフェイスが使用できます。
769
+
770
+ Tilt.new['template.slim'].render(scope)
771
+ Slim::Template.new('template.slim', optional_option_hash).render(scope)
772
+ Slim::Template.new(optional_option_hash) { source }.render(scope)
773
+
774
+ optional_option_hash は前述のオプションを持つことができます。このオブジェクトのスコープは実行されるテンプレートの
775
+ コードです。
776
+
777
+ ### Sinatra
778
+
779
+ <pre>require 'sinatra'
780
+ require 'slim'
781
+
782
+ get('/') { slim :index }
783
+
784
+ __END__
785
+ @@ index
786
+ doctype html
787
+ html
788
+ head
789
+ title Slim で Sinatra
790
+ body
791
+ h1 Slim は楽しい!
792
+ </pre>
793
+
794
+ ### Rails
795
+
796
+ Rails のジェネレータは [slim-rails](https://github.com/slim-template/slim-rails) によって提供されます。
797
+ slim-rails は Rails で Slim を使用する場合に必須ではありません。Slim をインストールし Gemfile に `gem 'slim'` を追加するだけです。
798
+ 後は .slim 拡張子を使えば Rails で使用できます。
799
+
800
+ #### Streaming
801
+
802
+ HTTP ストリーミングは Rails がそれをサポートしているバージョンであればデフォルトで有効化されています。
803
+
804
+ ## ツール
805
+
806
+ ### Slim コマンド 'slimrb'
807
+
808
+ gem の 'slim' にはコマンドラインから Slim をテストするための小さなツール 'slimrb' が付属します。
809
+
810
+ <pre>
811
+ $ slimrb --help
812
+ Usage: slimrb [options]
813
+ -s, --stdin Read input from standard input instead of an input file
814
+ --trace Show a full traceback on error
815
+ -c, --compile Compile only but do not run
816
+ -e, --erb Convert to ERB
817
+ -r, --rails Generate rails compatible code (Implies --compile)
818
+ -t, --translator Enable translator plugin
819
+ -l, --logic-less Enable logic less plugin
820
+ -p, --pretty Produce pretty html
821
+ -o, --option [NAME=CODE] Set slim option
822
+ -h, --help Show this message
823
+ -v, --version Print version
824
+ </pre>
825
+
826
+ 'slimrb' で起動し, コードをタイプし Ctrl-d で EOF を送ります。Windows のコマンドプロンプトでは Ctrl-z で EOF を送ります。使い方例:
827
+
828
+ <pre>
829
+ $ slimrb
830
+ markdown:
831
+ 最初の段落。
832
+
833
+ 2つ目の段落。
834
+
835
+ * 1つ
836
+ * 2つ
837
+ * 3つ
838
+
839
+ //Enter Ctrl-d
840
+ &lt;p&gt;最初の段落。 &lt;/p&gt;
841
+
842
+ &lt;p&gt;2つめの段落。 &lt;/p&gt;
843
+
844
+ &lt;ul&gt;
845
+ &lt;li&gt;1つ&lt;/li&gt;
846
+ &lt;li&gt;2つ&lt;/li&gt;
847
+ &lt;li&gt;3つ&lt;/li&gt;
848
+ &lt;/ul&gt;
849
+ </pre>
850
+
851
+ ### 構文ハイライト
852
+
853
+ 様々なテキストエディタのためのプラグインがあります。(最も重要なものも含めて - Vim, Emacs や Textmate):
854
+
855
+ * [Vim](https://github.com/slim-template/vim-slim)
856
+ * [Emacs](https://github.com/slim-template/emacs-slim)
857
+ * [Textmate / Sublime Text](https://github.com/slim-template/ruby-slim.tmbundle)
858
+ * [Espresso text editor](https://github.com/slim-template/Slim-Sugar)
859
+ * [Coda](https://github.com/slim-template/Coda-2-Slim.mode)
860
+
861
+ ### テンプレート変換 (HAML, ERB, ...)
862
+
863
+ * Slim は gem に含まれる `slimrb` や `Slim::ERBConverter` を用いて ERB に変換できます。
864
+ * [Haml2Slim converter](https://github.com/slim-template/haml2slim)
865
+ * [ERB2Slim, HTML2Slim converter](https://github.com/slim-template/html2slim)
866
+
867
+ ## テスト
868
+
869
+ ### ベンチマーク
870
+
871
+ *そうです, Slim は最速の Ruby のテンプレートエンジンです!
872
+ production モードの Slim は Erubis (最速のテンプレートエンジン) と同じくらい高速です。
873
+ ありがたいことに何らかの理由であなたが Slim を選択した場合, 私たちは
874
+ パフォーマンスが障害にならないだろうことを保証します。*
875
+
876
+ ベンチマークは `rake bench` で実行します。時間が余計にかかりますが遅い解析ベンチマークを
877
+ 実行したい場合 `slow` オプションを追加できます。
878
+
879
+ rake bench slow=1 iterations=1000
880
+
881
+ 私たちはコミット毎に Travis-CI でベンチマークをとっています。最新のベンチマーク結果はリンク先を確認: <http://travis-ci.org/slim-template/slim>
882
+
883
+ ### テストスイートと継続的インテグレーション
884
+
885
+ Slim は minitest ベースの拡張性のあるテストスイートを提供します。テストは 'rake test' または
886
+ rails のインテグレーションテストの場合 'rake test:rails' で実行できます。
887
+
888
+ 私たちは現在 markdown ファイルで書かれた人間が読めるテストを試しています: [TESTS.md](test/literate/TESTS.md)
889
+
890
+ Travis-CI は継続的インテグレーションテストに利用されています: <http://travis-ci.org/slim-template/slim>
891
+
892
+ Slim はすべての主要な Ruby 実装で動作します:
893
+
894
+ * Ruby 1.8.7, 1.9.3 および 2.0.0
895
+ * Ruby EE
896
+ * JRuby
897
+ * Rubinius 2.0
898
+
899
+ ## 貢献
900
+
901
+ Slim の改良を支援したい場合, Git で管理されているプロジェクトを clone してください。
902
+
903
+ $ git clone git://github.com/slim-template/slim
904
+
905
+ 魔法をかけた後 pull request を送ってください。私たちは pull request が大好きです!
906
+
907
+ Ruby の 2.0.0, 1.9.3 と 1.8.7 でテストをすることを覚えておいてください。
908
+
909
+ もしドキュメントの不足を見つけたら, README.md をアップデートして私たちを助けて下さい。Slim に割く時間がないが, 私たちが知るべきものを何か見つけた場合には issue を送ってください。
910
+
911
+ ## License
912
+
913
+ Slim は [MIT license](http://www.opensource.org/licenses/MIT) に基づいてリリースされています。
914
+
915
+ ## 作者
916
+
917
+ * [Daniel Mendler](https://github.com/minad) (Lead developer)
918
+ * [Andrew Stone](https://github.com/stonean)
919
+ * [Fred Wu](https://github.com/fredwu)
920
+
921
+ ## 寄付とサポート
922
+
923
+ このプロジェクトをサポートしたい場合, Gittip や Flattr のページを見てください。
924
+
925
+ [![Gittip donate button](http://img.shields.io/gittip/bevry.png)](https://www.gittip.com/min4d/ "Donate weekly to this project using Gittip")
926
+ [![Flattr donate button](https://raw.github.com/balupton/flattr-buttons/master/badge-89x18.gif)](https://flattr.com/submit/auto?user_id=min4d&url=http%3A%2F%2Fslim-lang.org%2F "Donate monthly to this project using Flattr")
927
+
928
+ 今のところ, 寄付はホスティング費用 (ドメインなど) に当てられる予定です。
929
+
930
+ ## 議論
931
+
932
+ * [Google Group](http://groups.google.com/group/slim-template)
933
+
934
+ ## 関連プロジェクト
935
+
936
+ テンプレートのコンパイルフレームワーク:
937
+
938
+ * [Temple](https://github.com/judofyr/temple)
939
+
940
+ フレームワークサポート:
941
+
942
+ * [Rails generators (slim-rails)](https://github.com/slim-template/slim-rails)
943
+
944
+ 構文ハイライト:
945
+
946
+ * [Vim](https://github.com/slim-template/vim-slim)
947
+ * [Emacs](https://github.com/slim-template/emacs-slim)
948
+ * [Textmate / Sublime Text](https://github.com/slim-template/ruby-slim.tmbundle)
949
+ * [Espresso text editor](https://github.com/slim-template/Slim-Sugar)
950
+ * [Coda](https://github.com/slim-template/Coda-2-Slim.mode)
951
+ * [Atom](https://github.com/slim-template/language-slim)
952
+
953
+ テンプレート変換 (HAML, ERB, ...):
954
+
955
+ * [Haml2Slim converter](https://github.com/slim-template/haml2slim)
956
+ * [ERB2Slim, HTML2Slim converter](https://github.com/slim-template/html2slim)
957
+
958
+ 移植言語/同様の言語:
959
+
960
+ * [Coffee script plugin for Slim](https://github.com/yury/coffee-views)
961
+ * [Clojure port of Slim](https://github.com/chaslemley/slim.clj)
962
+ * [Hamlet.rb (Similar template language)](https://github.com/gregwebs/hamlet.rb)
963
+ * [Plim (Python port of Slim)](https://github.com/2nd/plim)
964
+ * [Skim (Slim for Javascript)](https://github.com/jfirebaugh/skim)
965
+ * [Emblem.js (Javascript, similar to Slim)](https://github.com/machty/emblem.js)
966
+ * [Haml (Older engine which inspired Slim)](https://github.com/haml/haml)
967
+ * [Jade (Similar engine for javascript)](https://github.com/visionmedia/jade)
968
+ * [Sweet (Similar engine which also allows to write classes and functions)](https://github.com/joaomdmoura/sweet)