wtex 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.ja.pdf +0 -0
  2. data/README.ja.txt +57 -54
  3. data/lib/wtex.rb +10 -6
  4. data/t/test_wtex.rb +180 -0
  5. metadata +3 -3
Binary file
@@ -119,83 +119,64 @@ body.txtに、Wiki/TeXマークアップでソースを記述します。head.te
119
119
  行の先頭に「]」記号、または「|」記号を置くと、その行は枠付きボックスとして表示されます。行の直前に「foo.rb:」のようにコロン「:」で終わる行を書くと、ボックスのタイトルとして扱われます。「]」で始まるブロックの内部では、WikiマークアップおよびTeXマークアップが利用可能です。「|」で始まるブロックの内部では、WikiマークアップもTeXマークアップも使用できず、ソースの文字がすべてそのまま表示されます。
120
120
 
121
121
  ソース:
122
- | foo_bar.tex:
123
- | ]foo,bar,
124
- | ]{\large\bf bar},**baz**
122
+ |foo_bar.tex:
123
+ |] foo,bar,
124
+ |] {\large\bf bar},**baz**
125
125
 
126
- \begin{WTbox}{出力(マークアップが評価される)}
127
- \begin{WTbox}{foo\_{}bar.tex}
128
- foo,bar,\\
129
- {\large\bf bar},{\large\bf baz}
130
- \end{WTbox}
131
- \end{WTbox}
126
+ 出力(マークアップが評価される):
127
+ ]foo_bar.tex:
128
+ ]] foo,bar,
129
+ ]] {\large\bf bar},**baz**
132
130
 
133
131
  ソース:
134
132
  | foo_bar.tex:
135
- | |foo,bar,
136
- | |{\large\bf bar},**baz**
133
+ || foo,bar,
134
+ || {\large\bf bar},**baz**
137
135
 
138
- \begin{WTbox}{出力(マークアップは評価されない)}
139
- \begin{WTcode}{foo\_{}bar.tex}
140
- foo,bar,
141
- {\large\bf bar},**baz**
142
- \end{WTcode}
143
- \end{WTbox}
136
+ 出力(マークアップは評価されない):
137
+ ]foo_bar.tex:
138
+ ]| foo,bar,
139
+ ]| {\large\bf bar},**baz**
144
140
 
145
141
  ! 引用
146
142
 
147
143
  行の先頭に「>」記号を置くと、その行は引用として扱われます。引用の内部では、WikiマークアップおよびTeXマークアップが利用可能です。
148
144
 
149
145
  ソース:
150
- | >吾輩は猫である。
151
- | >名前は__まだ無い__。
146
+ |> 吾輩は猫である。
147
+ |> 名前は__まだ無い__。
152
148
 
153
- \begin{WTbox}{出力}
154
- \begin{quote}
155
- 吾輩は猫である。\\
156
- 名前は\WTunderline{まだ無い}。
157
- \end{quote}
158
- \end{WTbox}
149
+ 出力:
150
+ ]> 吾輩は猫である。
151
+ ]> 名前は__まだ無い__。
159
152
 
160
153
  ! リスト
161
154
 
162
155
  行の先頭に「*」または「+」記号を置くと、その行はリストアイテムとして扱われます。「*」は序数なし、「+」だと序数ありです。強調の「\verb|**foo**|」と区別するため、記号とアイテムの間には、必ず空白を入れてください。
163
156
 
164
157
  ソース:
165
- | * foo
166
- | * bar
167
- | *baz←くっつけて書くとリストにならない
168
-
169
- \begin{WTbox}{出力}
170
- \begin{itemize}
171
- \item foo
172
- \item bar
173
- \end{itemize}
174
- *baz←くっつけて書くとリストにならない
175
- \end{WTbox}
158
+ |* foo
159
+ |* bar
160
+ |*baz←くっつけて書くとリストにならない
161
+
162
+ 出力:
163
+ ]* foo
164
+ ]* bar
165
+ ]*baz←くっつけて書くとリストにならない
176
166
 
177
167
  リストを入れ子にすることもできます。
178
168
 
179
169
  ソース:
180
- | + foo
181
- | +* bar
182
- | +* baz
183
- | + qux
184
-
185
- \begin{WTbox}{出力}
186
- \begin{enumerate}
187
- \item foo\begin{itemize}
188
- \item bar
189
- \item baz
190
- \end{itemize}
191
-
192
- \item qux
193
- \end{enumerate}
194
- \end{WTbox}
195
-
196
- ! テーブル・表
170
+ |+ foo
171
+ |+* bar
172
+ |+* baz
173
+ |+ qux
197
174
 
198
- 今のところ、Wikiマークアップはありません。TeXで書きましょう。
175
+ 出力:
176
+ ]+ foo
177
+ ]+* bar
178
+ ]+* baz
179
+ ]+ qux
199
180
 
200
181
  !! TeXとの混在
201
182
 
@@ -241,6 +222,28 @@ TeXの特殊記号は、自動的にエスケープされます。「#」「%」
241
222
  出力(ディスプレイ数式モード):
242
223
  ] これはひどい $$x^2 + \sqrt{y}$$ です。
243
224
 
225
+ ! ボックス、引用、リスト、TeX環境のネスティング
226
+
227
+ Wikiマークアップのうち、ボックス「]」引用「>」リスト「*」「+」は、TeX環境やボックス・引用同士でネスティングすることができます。ネスティングする場合、Wiki要素の行頭マークは空白を開けずに連続して書いてください。また、TeX環境の内部にWikiマークアップを書いても評価されません。
228
+
229
+ ソース:
230
+ |]foo:
231
+ |]] $$x^2 + 2y + z$$
232
+ |]> **boo**
233
+ |]>+ A
234
+ |]>++ B
235
+ |] \begin{huge}
236
+ |] FOO\end{huge}
237
+
238
+ 出力:
239
+ ]]foo:
240
+ ]]] $$x^2 + 2y + z$$
241
+ ]]> **boo**
242
+ ]]>+ A
243
+ ]]>++ B
244
+ ]] \begin{huge}
245
+ ]] FOO\end{huge}
246
+
244
247
 
245
248
 
246
249
  !!! ライセンス
@@ -40,16 +40,20 @@ class WTeX
40
40
  line = ''
41
41
  type = :blank
42
42
 
43
- markups = []
43
+ markups = []
44
44
  rex_line = /(.*?)(\\|\$\$?|\{|\n|\z)/
45
45
  s = StringScanner.new str
46
46
 
47
47
  while !s.eos? && s.scan(rex_line)
48
48
  line += s[1]
49
49
 
50
- if s[2] =~ /\\|\$|\{/
51
- line += skip_tex_markup(s, s[2], markups)
52
- next unless s.match? /\z/
50
+ if s[2] =~ /\\|\$\$?|\{/
51
+ if [:box, :code, :quote].include? wiki_type(line, s)
52
+ line << s[2] << (s.scan(/(.*?)(\n|\z)/) ? s[1] : '') # do not skip
53
+ else
54
+ line += skip_tex_markup(s, s[2], markups)
55
+ next unless s.match? /\z/
56
+ end
53
57
  end
54
58
 
55
59
  new_type = wiki_type(line, s)
@@ -162,7 +166,7 @@ class WTeX
162
166
  title = escape_specials $1
163
167
  end
164
168
  body.gsub!(/^(\]|\|)/m, '')
165
- body = element_p(body) if type == :box
169
+ body = _tex(body) if type == :box
166
170
  if title
167
171
  <<_eos
168
172
  \\begin{WT#{type}}{#{title}}
@@ -180,7 +184,7 @@ _eos
180
184
  body.gsub!(/^>/m, '')
181
185
  <<_eos
182
186
  \\begin{quote}
183
- #{element_p body}\\end{quote}
187
+ #{_tex body}\\end{quote}
184
188
  _eos
185
189
  end
186
190
 
@@ -250,6 +250,115 @@ _eos
250
250
  )
251
251
  end
252
252
 
253
+ def test_tex_nested_wiki_in_box
254
+ w = <<'_eos'
255
+ ]foo
256
+ ]+ bar
257
+ ]+ baz
258
+ _eos
259
+ assert_equal(
260
+ <<'_eos',
261
+ \begin{WTbox-without-title}
262
+ foo
263
+ \begin{enumerate}
264
+ \item bar
265
+ \item baz
266
+ \end{enumerate}
267
+ \end{WTbox-without-title}
268
+ _eos
269
+ @wt.tex(w),
270
+ 'WTeX#tex should convert blocks inside a boxed block'
271
+ )
272
+
273
+ w = <<'_eos'
274
+ qux:
275
+ ]foo
276
+ ]bar:
277
+ ]| baz
278
+ _eos
279
+ assert_equal(
280
+ <<'_eos',
281
+ \begin{WTbox}{qux}
282
+ foo
283
+ \begin{WTcode}{bar}
284
+ baz
285
+ \end{WTcode}
286
+ \end{WTbox}
287
+ _eos
288
+ @wt.tex(w),
289
+ 'WTeX#tex should convert blocks inside a boxed block'
290
+ )
291
+ end
292
+
293
+ def test_tex_nested_tex_in_box
294
+ w = <<'_eos'
295
+ ]foo
296
+ ]$$
297
+ ]x^2 + 2y + z
298
+ ]$$
299
+ _eos
300
+ assert_equal(
301
+ <<'_eos',
302
+ \begin{WTbox-without-title}
303
+ foo\\
304
+ $$
305
+ x^2 + 2y + z
306
+ $$
307
+ \end{WTbox-without-title}
308
+ _eos
309
+ @wt.tex(w),
310
+ 'WTeX#tex should convert multi-line TeX inside a boxed block'
311
+ )
312
+ end
313
+
314
+ def test_tex_complex_nesting_in_box
315
+ w = <<'_eos'
316
+ ]foo
317
+ ]]$$
318
+ ]]x^2 + 2y + z
319
+ ]]$$
320
+ ]]**boo**
321
+ ]\begin{huge}
322
+ ]FOO\end{huge}
323
+ _eos
324
+ assert_equal(
325
+ <<'_eos',
326
+ \begin{WTbox-without-title}
327
+ foo
328
+ \begin{WTbox-without-title}
329
+ $$
330
+ x^2 + 2y + z
331
+ $$\\
332
+ {\large\bf boo}
333
+ \end{WTbox-without-title}
334
+ \begin{huge}
335
+ FOO\end{huge}
336
+ \end{WTbox-without-title}
337
+ _eos
338
+ @wt.tex(w),
339
+ 'WTeX#tex should not skip complex Wiki/TeX nesting inside a boxed block'
340
+ )
341
+ end
342
+
343
+ def test_tex_broken_tex_inside_box
344
+ w = <<'_eos'
345
+ ]foo
346
+ ]$$
347
+ a$c
348
+ _eos
349
+ assert_equal(
350
+ <<'_eos',
351
+ \begin{WTbox-without-title}
352
+ foo\\
353
+ \${}\${}
354
+ \end{WTbox-without-title}
355
+ a\${}c
356
+ _eos
357
+ @wt.tex(w),
358
+ 'WTeX#tex should escape broken TeX inside a box'
359
+ )
360
+ end
361
+
253
362
  def test_tex_code
254
363
  w = <<'_eos'
255
364
  foo.rb:
@@ -329,6 +438,25 @@ _eos
329
438
  )
330
439
  end
331
440
 
441
+ def test_tex_complex_nesting_in_code
442
+ w = <<'_eos'
443
+ |]**boo**
444
+ |\begin{huge}
445
+ |FOO\end{huge}
446
+ _eos
447
+ assert_equal(
448
+ <<'_eos',
449
+ \begin{WTcode-without-title}
450
+ ]**boo**
451
+ \begin{huge}
452
+ FOO\end{huge}
453
+ \end{WTcode-without-title}
454
+ _eos
455
+ @wt.tex(w),
456
+ 'WTeX#tex should treat complex Wiki/TeX nesting inside a code block'
457
+ )
458
+ end
459
+
332
460
  def test_tex_quote
333
461
  w = <<'_eos'
334
462
  >a = 123
@@ -346,6 +474,58 @@ _eos
346
474
  )
347
475
  end
348
476
 
477
+ def test_tex_nested_wiki_in_quote
478
+ w = <<'_eos'
479
+ >foo
480
+ >+ bar
481
+ >+ baz
482
+ _eos
483
+ assert_equal(
484
+ <<'_eos',
485
+ \begin{quote}
486
+ foo
487
+ \begin{enumerate}
488
+ \item bar
489
+ \item baz
490
+ \end{enumerate}
491
+ \end{quote}
492
+ _eos
493
+ @wt.tex(w),
494
+ 'WTeX#tex should convert nested blocks inside a quote'
495
+ )
496
+ end
497
+
498
+ def test_tex_complex_nesting_in_quote
499
+ w = <<'_eos'
500
+ >foo
501
+ >]$$
502
+ >]x^2 + 2y + z
503
+ >]$$
504
+ >>**boo**
505
+ >\begin{huge}
506
+ >FOO\end{huge}
507
+ _eos
508
+ assert_equal(
509
+ <<'_eos',
510
+ \begin{quote}
511
+ foo
512
+ \begin{WTbox-without-title}
513
+ $$
514
+ x^2 + 2y + z
515
+ $$
516
+ \end{WTbox-without-title}
517
+ \begin{quote}
518
+ {\large\bf boo}
519
+ \end{quote}
520
+ \begin{huge}
521
+ FOO\end{huge}
522
+ \end{quote}
523
+ _eos
524
+ @wt.tex(w),
525
+ 'WTeX#tex should not skip complex Wiki/TeX nesting inside a quote'
526
+ )
527
+ end
528
+
349
529
  def test_tex_itemize
350
530
  w = <<'_eos'
351
531
  * foo
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Akira FUNAI
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-20 00:00:00 +09:00
17
+ date: 2011-02-21 00:00:00 +09:00
18
18
  default_executable: wikitex
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency