friendly_format 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/tasks/test.rake ADDED
@@ -0,0 +1,40 @@
1
+
2
+ if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
3
+ require 'rake/testtask'
4
+
5
+ namespace :test do
6
+
7
+ Rake::TestTask.new(:run) do |t|
8
+ t.libs = PROJ.libs
9
+ t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
10
+ else PROJ.test.files end
11
+ t.ruby_opts += PROJ.ruby_opts
12
+ t.ruby_opts += PROJ.test.opts
13
+ end
14
+
15
+ if HAVE_RCOV
16
+ desc 'Run rcov on the unit tests'
17
+ task :rcov => :clobber_rcov do
18
+ opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
19
+ opts = opts.join(' ')
20
+ files = if test(?f, PROJ.test.file) then [PROJ.test.file]
21
+ else PROJ.test.files end
22
+ files = files.join(' ')
23
+ sh "#{RCOV} #{files} #{opts}"
24
+ end
25
+
26
+ task :clobber_rcov do
27
+ rm_r 'coverage' rescue nil
28
+ end
29
+ end
30
+
31
+ end # namespace :test
32
+
33
+ desc 'Alias to test:run'
34
+ task :test => 'test:run'
35
+
36
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
+
38
+ end
39
+
40
+ # EOF
@@ -0,0 +1,111 @@
1
+ http://phpbb.godfat.org/viewtopic.php?t=873
2
+ <pre> 作者 godfat (godfat 真常) 站內 ProjectX
3
+ 標題 Re: [PSC] variants timer
4
+ 時間 2008/03/04 Tue 00:34:54
5
+ http://phpbb.godfat.org/viewtopic.php?t=873
6
+ <a href="http://phpbb.godfat.org/viewtopic.php?t=873">
7
+ 測試</a>
8
+ <a href="http://phpbb.godfat.org/viewtopic.php?t=873">
9
+ <img src="http://phpbb.godfat.org/templates/subSilver/images/logo_phpBB.gif"/></a>
10
+ ※ 引述《godfat (godfat 真常)》之銘言:
11
+ > 3. tuple + traits, 也就是一堆 template 技巧了
12
+ > class Dispatcher{
13
+ > template <class T>
14
+ > void sub(shared_ptr<T> p){
15
+ > get_tuple_data_field_by_type<T>(data).push_back(p);
16
+ > }
17
+ > tuple<A, B, C> data;
18
+ > };
19
+
20
+ 以上 A, B, C 是指 timer_subscriber_list<A>, etc.
21
+
22
+ 這個東西會需要從 T => tuple index 的 mapping
23
+ 現在這部份做完了...........(template 沒忘太多啊哈哈)
24
+
25
+ #include <tr1/tuple>
26
+ #include <tr1/type_traits>
27
+ #include <iostream>
28
+
29
+ using namespace std::tr1;
30
+
31
+ // 拿來判斷兩個整數是否相同,這是為了檢查有沒有爆表
32
+ // 像是 tuple_element<3, tuple<int,int,int> >::type
33
+ // 這樣就是爆表,因為這 tuple 沒這麼大
34
+ template <bool> struct is_equal_type { typedef true_type type; };
35
+ template <> struct is_equal_type<false>{ typedef false_type type; };
36
+
37
+ // 定義相等的話,is_equal<1,1>::value 會是 1
38
+ // is_equal<1,2>::value 會是 0
39
+ // ::type 會是 true_type/false_type (from tr1)
40
+ template <int Lhs, int Rhs> struct is_equal{
41
+ enum{ value = Lhs == Rhs };
42
+ typedef typename is_equal_type<value>::type type;
43
+ };
44
+
45
+ template <class T, class Tuple, int Index> struct type_index_imp;
46
+
47
+ // 如果跑到這裡,表示爆表了,在我的 g++4.3 上會顯示:
48
+ // tuple.cpp:20: error: ‘type_not_found’ is not a member of "T"
49
+ template <class T, class Tuple, int Index, class Bool>
50
+ struct type_index_check{
51
+ enum{ value = T::type_not_found };
52
+ };
53
+
54
+ // 沒有爆表就繼續找吧
55
+ template <class T, class Tuple, int Index>
56
+ struct type_index_check<T, Tuple, Index, false_type>{
57
+ enum{ value = type_index_imp<T, Tuple, Index+1>::value };
58
+ };
59
+
60
+ // 找到了!
61
+ template <class T, class Tuple, int Index, class Bool>
62
+ struct type_index_if{
63
+ enum{ value = Index }; // found, stop recursion
64
+ };
65
+
66
+ // 不直接呼叫 imp, 呼叫 check 檢查是否爆表
67
+ template <class T, class Tuple, int Index>
68
+ struct type_index_if<T, Tuple, Index, false_type>{
69
+ enum{ value = type_index_check<T, Tuple, Index,
70
+ typename is_equal<Index+1, tuple_size<Tuple>::value>::type>::value };
71
+ };
72
+
73
+ // 檢查兩個型別是否相同
74
+ template <class T, class Tuple, int Index>
75
+ struct type_index_imp{
76
+ enum{ value = type_index_if<T, Tuple, Index,
77
+ typename is_same<T, typename tuple_element<Index, Tuple>::type>::type>::value };
78
+ };
79
+
80
+ // simple wrapper
81
+ template <class T, class Tuple>
82
+ struct type_index{
83
+ enum{ value = type_index_imp<T, Tuple, 0>::value };
84
+ };
85
+
86
+ int main(){
87
+ typedef tuple<int, char, void> test_t;
88
+ std::cout << type_index<int, test_t>::value << std::endl;
89
+ std::cout << type_index<char, test_t>::value << std::endl;
90
+ std::cout << type_index<void, test_t>::value << std::endl;
91
+ std::cout << tuple_size<test_t>::value << std::endl;
92
+ // std::cout << type_index<int*, test_t>::value << std::endl;
93
+ }
94
+
95
+ 輸出:
96
+ 0
97
+ 1
98
+ 2
99
+ 3
100
+
101
+ 最後一行註解拿掉,則顯示:
102
+ tuple.cpp:20: error: "type_not_found" is not a member of "T"
103
+
104
+ 這樣應該是蠻完整的了。有了這個之後.... 後面還有得做 XD
105
+ 至少還需要一個 tuple for_each, 這也會用 template 遞迴展開
106
+
107
+ --
108
+ ※ Orign: 群星的眷屬 chance.twbbs.org
109
+ ◆ Author: godfat From 220-135-28-18.HINET-IP.hinet.net</pre>
110
+
111
+ end of article...
@@ -0,0 +1,108 @@
1
+ <a href="http://phpbb.godfat.org/viewtopic.php?t=873" title="http://phpbb.godfat.org/viewtopic.php?t=873">http://phpbb.godfat.org/viewtopic.php?t=873</a><br /><pre> 作者 godfat (godfat 真常) 站內 ProjectX
2
+ 標題 Re: [PSC] variants timer
3
+ 時間 2008/03/04 Tue 00:34:54
4
+ <a href="http://phpbb.godfat.org/viewtopic.php?t=873" title="http://phpbb.godfat.org/viewtopic.php?t=873">http://phpbb.godfat.org/viewtopic.php?t=873</a>
5
+ &lt;a href="<a href="http://phpbb.godfat.org/viewtopic.php?t=873" title="http://phpbb.godfat.org/viewtopic.php?t=873">http://phpbb.godfat.org/viewtopic.php?t=873</a>">
6
+ 測試&lt;/a>
7
+ &lt;a href="<a href="http://phpbb.godfat.org/viewtopic.php?t=873" title="http://phpbb.godfat.org/viewtopic.php?t=873">http://phpbb.godfat.org/viewtopic.php?t=873</a>">
8
+ &lt;img src="<a href="http://phpbb.godfat.org/templates/subSilver/images/logo_phpBB.gif" title="http://phpbb.godfat.org/templates/subSilver/images/logo_phpBB.gif">http://phpbb.godfat.org/templates/subSilver/images/logo_phpBB.gif</a>"/>&lt;/a>
9
+ ※ 引述《godfat (godfat 真常)》之銘言:
10
+ > 3. tuple + traits, 也就是一堆 template 技巧了
11
+ > class Dispatcher{
12
+ > template &lt;class T>
13
+ > void sub(shared_ptr&lt;T> p){
14
+ > get_tuple_data_field_by_type&lt;T>(data).push_back(p);
15
+ > }
16
+ > tuple&lt;A, B, C> data;
17
+ > };
18
+
19
+ 以上 A, B, C 是指 timer_subscriber_list&lt;A>, etc.
20
+
21
+ 這個東西會需要從 T => tuple index 的 mapping
22
+ 現在這部份做完了...........(template 沒忘太多啊哈哈)
23
+
24
+ #include &lt;tr1/tuple>
25
+ #include &lt;tr1/type_traits>
26
+ #include &lt;iostream>
27
+
28
+ using namespace std::tr1;
29
+
30
+ // 拿來判斷兩個整數是否相同,這是為了檢查有沒有爆表
31
+ // 像是 tuple_element&lt;3, tuple&lt;int,int,int> >::type
32
+ // 這樣就是爆表,因為這 tuple 沒這麼大
33
+ template &lt;bool> struct is_equal_type { typedef true_type type; };
34
+ template &lt;> struct is_equal_type&lt;false>{ typedef false_type type; };
35
+
36
+ // 定義相等的話,is_equal&lt;1,1>::value 會是 1
37
+ // is_equal&lt;1,2>::value 會是 0
38
+ // ::type 會是 true_type/false_type (from tr1)
39
+ template &lt;int Lhs, int Rhs> struct is_equal{
40
+ enum{ value = Lhs == Rhs };
41
+ typedef typename is_equal_type&lt;value>::type type;
42
+ };
43
+
44
+ template &lt;class T, class Tuple, int Index> struct type_index_imp;
45
+
46
+ // 如果跑到這裡,表示爆表了,在我的 g++4.3 上會顯示:
47
+ // tuple.cpp:20: error: ‘type_not_found’ is not a member of "T"
48
+ template &lt;class T, class Tuple, int Index, class Bool>
49
+ struct type_index_check{
50
+ enum{ value = T::type_not_found };
51
+ };
52
+
53
+ // 沒有爆表就繼續找吧
54
+ template &lt;class T, class Tuple, int Index>
55
+ struct type_index_check&lt;T, Tuple, Index, false_type>{
56
+ enum{ value = type_index_imp&lt;T, Tuple, Index+1>::value };
57
+ };
58
+
59
+ // 找到了!
60
+ template &lt;class T, class Tuple, int Index, class Bool>
61
+ struct type_index_if{
62
+ enum{ value = Index }; // found, stop recursion
63
+ };
64
+
65
+ // 不直接呼叫 imp, 呼叫 check 檢查是否爆表
66
+ template &lt;class T, class Tuple, int Index>
67
+ struct type_index_if&lt;T, Tuple, Index, false_type>{
68
+ enum{ value = type_index_check&lt;T, Tuple, Index,
69
+ typename is_equal&lt;Index+1, tuple_size&lt;Tuple>::value>::type>::value };
70
+ };
71
+
72
+ // 檢查兩個型別是否相同
73
+ template &lt;class T, class Tuple, int Index>
74
+ struct type_index_imp{
75
+ enum{ value = type_index_if&lt;T, Tuple, Index,
76
+ typename is_same&lt;T, typename tuple_element&lt;Index, Tuple>::type>::type>::value };
77
+ };
78
+
79
+ // simple wrapper
80
+ template &lt;class T, class Tuple>
81
+ struct type_index{
82
+ enum{ value = type_index_imp&lt;T, Tuple, 0>::value };
83
+ };
84
+
85
+ int main(){
86
+ typedef tuple&lt;int, char, void> test_t;
87
+ std::cout &lt;&lt; type_index&lt;int, test_t>::value &lt;&lt; std::endl;
88
+ std::cout &lt;&lt; type_index&lt;char, test_t>::value &lt;&lt; std::endl;
89
+ std::cout &lt;&lt; type_index&lt;void, test_t>::value &lt;&lt; std::endl;
90
+ std::cout &lt;&lt; tuple_size&lt;test_t>::value &lt;&lt; std::endl;
91
+ // std::cout &lt;&lt; type_index&lt;int*, test_t>::value &lt;&lt; std::endl;
92
+ }
93
+
94
+ 輸出:
95
+ 0
96
+ 1
97
+ 2
98
+ 3
99
+
100
+ 最後一行註解拿掉,則顯示:
101
+ tuple.cpp:20: error: "type_not_found" is not a member of "T"
102
+
103
+ 這樣應該是蠻完整的了。有了這個之後.... 後面還有得做 XD
104
+ 至少還需要一個 tuple for_each, 這也會用 template 遞迴展開
105
+
106
+ --
107
+ ※ Orign: 群星的眷屬 chance.twbbs.org
108
+ ◆ Author: godfat From 220-135-28-18.HINET-IP.hinet.net</pre><br /><br />end of article...<br />
@@ -0,0 +1,168 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'minitest/unit'
5
+ MiniTest::Unit.autorun
6
+
7
+ require 'friendly_format'
8
+
9
+ # 2008-05-09 godfat
10
+ class TestFriendlyFormat < MiniTest::Unit::TestCase
11
+ include FriendlyFormat
12
+
13
+ def test_article
14
+ str =
15
+ ' http://friends.roodo.com/forum/viewTopic/10170
16
+ 用 Haskell 寫成的名軟體?
17
+
18
+ 主題發起人 : godfat 真常
19
+
20
+ 2008年04月02日 01:24
21
+ 第一個當然是首推唐鳳寫的 Pugs!
22
+ 是基於 Perl 6 一直實作困難,所以才決定寫 Pugs 當中繼者。
23
+
24
+ Pugs 無論對 Haskell 社群和 Perl 6 社群都有很大的影響。
25
+ 唐大師:
26
+ http://zh.wikipedia.org/wiki/唐鳳
27
+
28
+ 另一個就是 Darcs 了,非常強大的 revision control system,
29
+ 蠻多人在用的。理所當然,比 svn 先進多了。
30
+ svn 其實也差不多是要慢慢式微了...
31
+ 取而代之的大概會是 SVK, git, 和 Darcs 吧
32
+ 目前看到是這三個最多,都很先進。不過我對 git 沒好感。
33
+
34
+ 另一方面還有非常多,Haskell 正在成長中啊 ~~~
35
+ 很多知名 library 都有 haskell binding 了,wxWidgets,
36
+ OpenGL, 還有一些 web cgi 之類的東西也有。
37
+
38
+ 現在切入正是時機啊... XD'
39
+
40
+ assert_equal \
41
+ ' <a href="http://friends.roodo.com/forum/viewTopic/10170" title="http://friends.roodo.com/forum/viewTopic/10170">http://friends.roodo.com/forum/viewTopic/10170</a>
42
+ 用 Haskell 寫成的名軟體?
43
+
44
+ 主題發起人 : godfat 真常
45
+
46
+ 2008年04月02日 01:24
47
+ 第一個當然是首推唐鳳寫的 Pugs!
48
+ 是基於 Perl 6 一直實作困難,所以才決定寫 Pugs 當中繼者。
49
+
50
+ Pugs 無論對 Haskell 社群和 Perl 6 社群都有很大的影響。
51
+ 唐大師:
52
+ <a href="http://zh.wikipedia.org/wiki/" title="http://zh.wikipedia.org/wiki/">http://zh.wikipedia.org/wiki/</a>唐鳳
53
+
54
+ 另一個就是 Darcs 了,非常強大的 revision control system,
55
+ 蠻多人在用的。理所當然,比 svn 先進多了。
56
+ svn 其實也差不多是要慢慢式微了...
57
+ 取而代之的大概會是 SVK, git, 和 Darcs 吧
58
+ 目前看到是這三個最多,都很先進。不過我對 git 沒好感。
59
+
60
+ 另一方面還有非常多,Haskell 正在成長中啊 ~~~
61
+ 很多知名 library 都有 haskell binding 了,wxWidgets,
62
+ OpenGL, 還有一些 web cgi 之類的東西也有。
63
+
64
+ 現在切入正是時機啊... XD', s = format_autolink(str)
65
+ assert_equal s, format_autolink_regexp(str)
66
+ end
67
+ def test_persent
68
+ str =
69
+ 'XDDDD
70
+ http://www.amazon.co.jp/%E3%80%8C%E7%84%94~%E3%83%9B%E3%83%A0%E3%83%A9%E3%80%8D~Ar-tonelico2-hymmnos-concert-Side-%E7%B4%85~/dp/B000VKZL30/ref=pd_sbs_sw_img_2 orz'
71
+
72
+ assert_equal \
73
+ 'XDDDD
74
+ <a href="http://www.amazon.co.jp/%E3%80%8C%E7%84%94~%E3%83%9B%E3%83%A0%E3%83%A9%E3%80%8D~Ar-tonelico2-hymmnos-concert-Side-%E7%B4%85~/dp/B000VKZL30/ref=pd_sbs_sw_img_2" title="http://www.amazon.co.jp/%E3%80%8C%E7%84%94~%E3%83%9B%E3%83%A0%E3%83%A9%E3%80%8D~Ar-tonelico2-hymmnos-concert-Side-%E7%B4%85~/dp/B000VKZL30/ref=pd_sbs_sw_img_2">http://www.amazon.co.jp/%E3%80%8C%E7%84%94~%E3%83%9B%E3%83%A0%E3%83%A9%E...</a> orz', s = format_autolink(str)
75
+ assert_equal s, format_autolink_regexp(str)
76
+ end
77
+ def test_img_src
78
+ str =
79
+ 'Thirst for Knowledge
80
+ <img src="http://friends.roodo.com/images/diary_photos_large/15386/MjMyNjYtdGhpcnN0X2Zvcl9rbm93bGVkZ2U=.jpg" />
81
+
82
+ 2007年12月14日
83
+ '
84
+ assert_equal str, s = format_autolink(str)
85
+ assert_equal s, format_autolink_regexp(str)
86
+ end
87
+ def test_wikipedia_persent
88
+ str = 'http://en.wikipedia.org/wiki/Haskell_%28programming_language%29'
89
+ assert_equal \
90
+ '<a href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29" title="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29">http://en.wikipedia.org/wiki/Haskell_%28programming_language%29</a>', s = format_autolink(str)
91
+ assert_equal s, format_autolink_regexp(str)
92
+ end
93
+ def test_wikipedia_parentheses
94
+ str = 'http://en.wikipedia.org/wiki/Haskell_(programming_language)'
95
+ assert_equal \
96
+ '<a href="http://en.wikipedia.org/wiki/Haskell_" title="http://en.wikipedia.org/wiki/Haskell_" class="XD">http://en.wikipedia.org/wiki/Haskell_</a>(programming_language)', s = format_autolink(str, :class => 'XD')
97
+ assert_equal s, format_autolink_regexp(str, :class => 'XD')
98
+ end
99
+ def test_fixing_html
100
+ str = 'test<p>if missing end of p'
101
+ assert_equal 'test<p>if missing end of p</p>', format_autolink(str)
102
+ str = 'test<p>if missing<a> end of p'
103
+ assert_equal 'test<p>if missing<a> end of p</a></p>', format_autolink(str)
104
+ end
105
+ def test_www_url
106
+ str = 'go to www.google.com to see if you can see'
107
+ assert_equal 'go to <a href="http://www.google.com" title="http://www.google.com">www.google.com</a> to see if you can see',
108
+ s = format_autolink(str)
109
+ assert_equal s, format_autolink_regexp(str)
110
+ end
111
+ def test_escape_html_and_correct_html
112
+ str = 'test<p>if missing end of p'
113
+ assert_equal 'test<p>if missing end of p</p>', format_article(str, :p)
114
+ assert_equal 'test&lt;p>if missing end of p&lt;/p>', format_article(str, :a)
115
+ str = '<pre>asdasd<a>orz'
116
+ assert_equal '<pre>asdasd&lt;a>orz</pre>', format_article(str, :a, :pre)
117
+ assert_equal '&lt;pre>asdasd<a>orz</a>&lt;/pre>', format_article(str, :a)
118
+ assert_equal '<pre>asdasd&lt;a>orz</pre>', format_article(str, :pre)
119
+ str = 'orz<img>asd'
120
+ assert_equal 'orz<img />asd', format_article(str, :img)
121
+ assert_equal 'orz&lt;img>asd', format_article(str)
122
+ end
123
+ def test_trim_url
124
+ str = 'test with http://890123456789012345678901234567890123456789012345678901234567890123456789.com'
125
+
126
+ assert_equal 'test with <a href="http://890123456789012345678901234567890123456789012345678901234567890123456789.com" title="http://890123456789012345678901234567890123456789012345678901234567890123456789.com">http://89012345678901234567890123456789012345678901234567890123456789012...</a>', s = format_article(str)
127
+ assert_equal s, format_autolink_regexp(str)
128
+ end
129
+ def test_escape_html
130
+ str = 'a lambda expression is &lambda; x. x+1'
131
+ assert_equal str, format_article(str)
132
+ str = 'as you can see, use &lt;img src="asd"/&gt; to use'
133
+ assert_equal str, format_article(str)
134
+ end
135
+ def test_html_with_pre_and_newline2br
136
+ result = File.read('test/sample/complex_article_result.txt')
137
+ input = File.read('test/sample/complex_article.txt')
138
+
139
+ assert_equal result, format_article(input, :pre)
140
+ assert_equal result, format_article(input, SetCommon.new)
141
+ end
142
+ def test_simple_link
143
+ s = '今天是我一歲生日 <a href="http://godfat.org/" title="http://godfat.org/">http://godfat.org/</a> 真的嗎?'
144
+ assert_equal s, format_article(s, :a)
145
+ assert_equal s, format_autolink_regexp(s)
146
+ end
147
+ def test_extra_xd_at_tail
148
+ input = '<img style="float: right;" src="http://flolac.iis.sinica.edu.tw/lambdawan/sites/default/files/ruby.png.thumb.jpg"/>
149
+ <a href="http://www.ruby-forum.com/topic/169911">JRuby 1.1.5 Released</a>
150
+ <a href="http://jruby.codehaus.org/">JRuby</a> 是用 Java 寫成的 Ruby interpreter/compiler.
151
+ 原本 JRuby 只是普通的 open source project, 後來因為 <a href="http://www.sun.com/">Sun Microsystem</a>,
152
+ 也就是 Java 的開發公司,看好 JRuby, 於是僱用 JRuby team,
153
+ full time 開發 JRuby. 後來 JRuby 在各方面都快速大幅成長,
154
+ 尤其效能有了不可思議的大幅提昇,可能是 Sun 有一些撇步沒有公開吧。
155
+
156
+ 效能大幅提昇之後,JRuby 開發沒有停緩,接下來是非常大量的相容性提昇。
157
+ 也從原本僅支援 interpret mode 到後來也支援 just in time 與 ahead of time 的
158
+ compilation mode. 非常驚人的開發速度。
159
+ <zzz><xd>
160
+ 此外,其中一位開發者,<a href="http://blog.headius.com/">Charles Nutter</a> 也經常參與 <a href="http://www.ruby-forum.com/forum/14">ruby-core</a> 的討論,
161
+ 對於 Ruby 的開發頗有貢獻。'
162
+
163
+ expected = '<img src="http://flolac.iis.sinica.edu.tw/lambdawan/sites/default/files/ruby.png.thumb.jpg" style="float: right;" /><br /><a href="http://www.ruby-forum.com/topic/169911">JRuby 1.1.5 Released</a><br /><a href="http://jruby.codehaus.org/">JRuby</a> 是用 Java 寫成的 Ruby interpreter/compiler.<br />原本 JRuby 只是普通的 open source project, 後來因為 <a href="http://www.sun.com/">Sun Microsystem</a>,<br />也就是 Java 的開發公司,看好 JRuby, 於是僱用 JRuby team,<br />full time 開發 JRuby. 後來 JRuby 在各方面都快速大幅成長,<br />尤其效能有了不可思議的大幅提昇,可能是 Sun 有一些撇步沒有公開吧。<br /><br />效能大幅提昇之後,JRuby 開發沒有停緩,接下來是非常大量的相容性提昇。<br />也從原本僅支援 interpret mode 到後來也支援 just in time 與 ahead of time 的<br />compilation mode. 非常驚人的開發速度。<br /><zzz>&lt;xd><br />此外,其中一位開發者,<a href="http://blog.headius.com/">Charles Nutter</a> 也經常參與 <a href="http://www.ruby-forum.com/forum/14">ruby-core</a> 的討論,<br />對於 Ruby 的開發頗有貢獻。&lt;/xd></zzz>'
164
+
165
+ assert_equal expected, format_article(input, SetCommon.new, :zzz)
166
+
167
+ end
168
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: friendly_format
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ platform: ruby
6
+ authors:
7
+ - "Lin Jen-Shin (a.k.a. godfat \xE7\x9C\x9F\xE5\xB8\xB8)"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-12 00:00:00 +08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hpricot
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.6.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: bones
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.0
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: minitest
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.3.0
44
+ version:
45
+ description: make user input be valid xhtml and format it with gsub("\n", "<br/>") etc. you can partially allow some tags and don't escape them.
46
+ email: godfat (XD) godfat.org
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - CHANGES
53
+ - LICENSE
54
+ - NOTICE
55
+ - README
56
+ - TODO
57
+ - friendly_format.gemspec
58
+ files:
59
+ - CHANGES
60
+ - LICENSE
61
+ - NOTICE
62
+ - README
63
+ - Rakefile
64
+ - TODO
65
+ - friendly_format.gemspec
66
+ - lib/friendly_format.rb
67
+ - lib/friendly_format/set_common.rb
68
+ - lib/friendly_format/set_strict.rb
69
+ - lib/friendly_format/version.rb
70
+ - tasks/ann.rake
71
+ - tasks/bones.rake
72
+ - tasks/gem.rake
73
+ - tasks/git.rake
74
+ - tasks/manifest.rake
75
+ - tasks/notes.rake
76
+ - tasks/post_load.rake
77
+ - tasks/rdoc.rake
78
+ - tasks/rubyforge.rake
79
+ - tasks/setup.rb
80
+ - tasks/spec.rake
81
+ - tasks/svn.rake
82
+ - tasks/test.rake
83
+ - test/sample/complex_article.txt
84
+ - test/sample/complex_article_result.txt
85
+ - test/test_friendly_format.rb
86
+ has_rdoc: true
87
+ homepage: http://github.com/godfat/friendly_format
88
+ post_install_message:
89
+ rdoc_options:
90
+ - --diagram
91
+ - --charset=utf-8
92
+ - --inline-source
93
+ - --line-numbers
94
+ - --promiscuous
95
+ - --main
96
+ - README
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: "0"
104
+ version:
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: "0"
110
+ version:
111
+ requirements: []
112
+
113
+ rubyforge_project: ludy
114
+ rubygems_version: 1.3.1
115
+ signing_key:
116
+ specification_version: 2
117
+ summary: make user input be valid xhtml and format it with gsub("\n", "<br/>") etc. you can partially allow some tags and don't escape them.
118
+ test_files:
119
+ - test/test_friendly_format.rb