BBRedCloth 0.8.8 → 0.9.0.alpha1

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.
Files changed (46) hide show
  1. data/BBRedCloth.gemspec +8 -8
  2. data/CHANGELOG +160 -3
  3. data/Manifest +0 -18
  4. data/README.textile +17 -2
  5. data/Rakefile +14 -12
  6. data/ext/redcloth_scan/redcloth.h +42 -16
  7. data/ext/redcloth_scan/redcloth_attributes.c +373 -379
  8. data/ext/redcloth_scan/redcloth_bbcode.c +57 -56
  9. data/ext/redcloth_scan/redcloth_bbcode_inline.c +22 -21
  10. data/ext/redcloth_scan/redcloth_inline.c +7488 -9996
  11. data/ext/redcloth_scan/redcloth_scan.c +22693 -8756
  12. data/lib/redcloth.rb +7 -0
  13. data/lib/redcloth/formatters/base.rb +26 -20
  14. data/lib/redcloth/formatters/html.rb +39 -96
  15. data/lib/redcloth/formatters/latex.rb +11 -11
  16. data/lib/redcloth/textile_doc.rb +0 -5
  17. data/lib/redcloth/version.rb +4 -4
  18. data/test/basic.yml +118 -13
  19. data/test/code.yml +15 -7
  20. data/test/html.yml +38 -1
  21. data/test/images.yml +51 -0
  22. data/test/links.yml +35 -1
  23. data/test/lists.yml +180 -1
  24. data/test/table.yml +86 -0
  25. data/test/test_restrictions.rb +0 -4
  26. data/test/textism.yml +2 -16
  27. data/test/threshold.yml +4 -19
  28. metadata +14 -31
  29. data/ext/mingw-rbconfig.rb +0 -176
  30. data/ext/redcloth_scan/redcloth_attributes.c.rl +0 -56
  31. data/ext/redcloth_scan/redcloth_attributes.java.rl +0 -96
  32. data/ext/redcloth_scan/redcloth_attributes.rl +0 -33
  33. data/ext/redcloth_scan/redcloth_bbcode.c.rl +0 -60
  34. data/ext/redcloth_scan/redcloth_bbcode.rl +0 -127
  35. data/ext/redcloth_scan/redcloth_bbcode_inline.c.rl +0 -72
  36. data/ext/redcloth_scan/redcloth_bbcode_inline.rl +0 -85
  37. data/ext/redcloth_scan/redcloth_common.c.rl +0 -19
  38. data/ext/redcloth_scan/redcloth_common.java.rl +0 -18
  39. data/ext/redcloth_scan/redcloth_common.rl +0 -111
  40. data/ext/redcloth_scan/redcloth_inline.c.rl +0 -205
  41. data/ext/redcloth_scan/redcloth_inline.java.rl +0 -108
  42. data/ext/redcloth_scan/redcloth_inline.rl +0 -176
  43. data/ext/redcloth_scan/redcloth_scan.c.rl +0 -236
  44. data/ext/redcloth_scan/redcloth_scan.java.rl +0 -555
  45. data/ext/redcloth_scan/redcloth_scan.rl +0 -426
  46. data/extras/ragel_profiler.rb +0 -73
@@ -1,426 +0,0 @@
1
- /*
2
- * redcloth_scan.rl
3
- *
4
- * Copyright (C) 2008 Jason Garber
5
- */
6
- %%{
7
-
8
- machine redcloth_scan;
9
-
10
- action bb_cat2html { CAT(html); }
11
- action bb_failed4html { rb_str_append(block,failed_start); rb_str_append(block,rb_funcall(self, rb_intern("escape"), 1, html)); fgoto main; }
12
-
13
- # blocks
14
- notextile_tag_start = "<notextile>" ;
15
- notextile_tag_end = "</notextile>" LF? ;
16
- noparagraph_line_start = " "+ ;
17
- notextile_block_start = ( "notextile" >A %{ STORE("type"); } A C :> "." ( "." %extend | "" ) " "+ ) ;
18
- pre_tag_start = "<pre" [^>]* ">" (space* "<code>")? ;
19
- pre_tag_end = ("</code>" space*)? "</pre>" LF? ;
20
- pre_block_start = ( "pre" >A %{ STORE("type"); } A C :> "." ( "." %extend | "" ) " "+ ) ;
21
- bc_start = ( "bc" >A %{ STORE("type"); } A C :> "." ( "." %extend | "" ) " "+ ) ;
22
- bq_start = ( "bq" >A %{ STORE("type"); } A C :> "." ( "." %extend | "" ) ( ":" %A uri %{ STORE("cite"); } )? " "+ ) ;
23
- non_ac_btype = ( "bq" | "bc" | "pre" | "notextile" );
24
- btype = (alpha alnum*) -- (non_ac_btype | "fn" digit+);
25
- block_start = ( btype >A %{ STORE("type"); } A C :> "." ( "." %extend | "" ) " "+ ) >B %{ STORE_B("fallback"); };
26
- all_btypes = btype | non_ac_btype;
27
- next_block_start = ( all_btypes A_noactions C_noactions :> "."+ " " ) >A @{ p = reg - 1; } ;
28
- double_return = LF{2,} ;
29
- block_end = ( double_return | EOF );
30
- ftype = ( "fn" >A %{ STORE("type"); } digit+ >A %{ STORE("id"); } ) ;
31
- footnote_start = ( ftype A C :> dotspace ) ;
32
- ul = "*" %{nest++; list_type = "ul";};
33
- ol = "#" %{nest++; list_type = "ol";};
34
- ul_start = ( ul | ol )* ul A C :> " "+ ;
35
- ol_start = ( ul | ol )* ol N A C :> " "+ ;
36
- list_start = ( ul_start | ol_start ) >{nest = 0;} ;
37
- dt_start = "-" . " "+ ;
38
- dd_start = ":=" ;
39
- long_dd = dd_start " "* LF %{ ADD_BLOCK(); ASET("type", "dd"); } any+ >A %{ TRANSFORM("text"); } :>> "=:" ;
40
- dl_start = (dt_start mtext (LF dt_start mtext)* " "* dd_start) ;
41
- blank_line = LF;
42
- link_alias = ( "[" >{ ASET("type", "ignore"); } %A chars %T "]" %A uri %{ STORE_URL("href"); } ) ;
43
- horizontal_rule = '*'{3,} | '-'{3,} | '_'{3,} ;
44
-
45
- # image lookahead
46
- IMG_A_LEFT = "<" %{ UNLESS_DISABLED_ATTRIBUTE(align,ASET("float", "left");) } ;
47
- IMG_A_RIGHT = ">" %{ UNLESS_DISABLED_ATTRIBUTE(align,ASET("float", "right");) } ;
48
- aligned_image = ( "["? "!" (IMG_A_LEFT | IMG_A_RIGHT) ) >A @{ p = reg - 1; } ;
49
-
50
- # html blocks
51
- BlockTagName = Name - ("pre" | "notextile" | "a" | "applet" | "basefont" | "bdo" | "br" | "font" | "iframe" | "img" | "map" | "object" | "param" | "embed" | "q" | "script" | "span" | "sub" | "sup" | "abbr" | "acronym" | "cite" | "code" | "del" | "dfn" | "em" | "ins" | "kbd" | "samp" | "strong" | "var" | "b" | "big" | "i" | "s" | "small" | "strike" | "tt" | "u");
52
- block_start_tag = "<" BlockTagName space+ AttrSet* (AttrEnd)? ">" | "<" BlockTagName ">";
53
- block_empty_tag = "<" BlockTagName space+ AttrSet* (AttrEnd)? "/>" | "<" BlockTagName "/>" ;
54
- block_end_tag = "</" BlockTagName space* ">" ;
55
- html_start = indent >B %{STORE_B("indent_before_start");} block_start_tag >B %{STORE_B("start_tag");} indent >B %{STORE_B("indent_after_start");} ;
56
- html_end = indent >B %{STORE_B("indent_before_end");} block_end_tag >B %{STORE_B("end_tag");} (indent LF?) >B %{STORE_B("indent_after_end");} ;
57
- standalone_html = indent (block_start_tag | block_empty_tag | block_end_tag) indent (LF+ | EOF);
58
- html_end_terminating_block = ( LF indent block_end_tag ) >A @{ p = reg - 1; } ;
59
-
60
- # tables
61
- para = ( default+ ) -- LF ;
62
- btext = para ( LF{2} )? ;
63
- tddef = ( D? S A C :> dotspace ) ;
64
- td = ( tddef? btext >A %T :> "|" >{PASS(table, "text", "td");} ) >X ;
65
- trdef = ( A C :> dotspace ) ;
66
- tr = ( trdef? "|" %{INLINE(table, "tr_open");} td+ ) >X %{INLINE(table, "tr_close");} ;
67
- trows = ( tr (LF >X tr)* ) ;
68
- tdef = ( "table" >X A C :> dotspace LF ) ;
69
- table = ( tdef? trows >{CLEAR(table); INLINE(table, "table_open"); RESET_REG();} ) ;
70
-
71
- bbchars = (default - space - "]" - "[")+ ;
72
- bbmtext = ( bbchars (mspace bbchars)* ) ;
73
-
74
- bb_pre_tag_start = "[pre" [^\]]* "]" (space* "[code]")? ;
75
- bb_pre_tag_end = ("[/code]" space*)? "[/pre]" LF? ;
76
-
77
- bb_quote_title1 = " title"? "=" bbmtext %{ if(store_cite) STORE("cite"); } >A;
78
- bb_quote_title2 = "][cite]" mtext %{ if(store_cite) STORE("cite"); } >A "[/cite";
79
- bb_quote_title = (bb_quote_title1|bb_quote_title2);
80
- bb_quote_tag_start = ("[quote" bb_quote_title? "]") ;
81
- bb_quote_tag_end = "[/quote]" LF? ;
82
-
83
- bb_spoiler_tag_title = " title"? "=" bbmtext %{ if(store_title) STORE("title"); } >A;
84
- bb_spoiler_tag_start = ("[spoiler" bb_spoiler_tag_title? "]") ;
85
- bb_spoiler_tag_end = "[/spoiler]" LF? ;
86
-
87
- # special finds
88
- youtube_uri = "http" "s"? "://www.youtube.com/watch?v=" >X (default - space - "]" - "[" - "&")+ >A %{STORE("youtubeid")} ("&feature" (default - space - "]" - "[" - "&" - LF)+)? ("&fmt=" (default - space - "]" - "[" - "&")+ >A %{STORE("youtubefmt")})? ("&" (default - space - "]" - "[" - "&" - LF)+)*;
89
- vimeo_uri = "http" "s"? "://vimeo.com/" >X digit+ >A %{STORE("vimeoid")};
90
-
91
- # info
92
- redcloth_version = ("RedCloth" >A ("::" | " " ) "VERSION"i ":"? " ")? %{STORE("prefix");} "RedCloth::VERSION" (LF* EOF | double_return) ;
93
-
94
- pre_tag := |*
95
- pre_tag_end { CAT(block); DONE(block); fgoto main; };
96
- default => esc_pre;
97
- *|;
98
-
99
- pre_block := |*
100
- EOF {
101
- ADD_BLOCKCODE();
102
- fgoto main;
103
- };
104
- double_return {
105
- if (IS_NOT_EXTENDED()) {
106
- ADD_BLOCKCODE();
107
- fgoto main;
108
- } else {
109
- ADD_EXTENDED_BLOCKCODE();
110
- }
111
- };
112
- double_return next_block_start {
113
- if (IS_NOT_EXTENDED()) {
114
- ADD_BLOCKCODE();
115
- fgoto main;
116
- } else {
117
- ADD_EXTENDED_BLOCKCODE();
118
- END_EXTENDED();
119
- fgoto main;
120
- }
121
- };
122
- default => esc_pre;
123
- *|;
124
-
125
- script_tag := |*
126
- script_tag_end { CAT(block); ASET("type", "ignore"); ADD_BLOCK(); fgoto main; };
127
- EOF { ASET("type", "ignore"); ADD_BLOCK(); fgoto main; };
128
- default => cat;
129
- *|;
130
-
131
- noparagraph_line := |*
132
- LF { ADD_BLOCK(); fgoto main; };
133
- default => cat;
134
- *|;
135
-
136
- notextile_tag := |*
137
- notextile_tag_end { ADD_BLOCK(); fgoto main; };
138
- default => cat;
139
- *|;
140
-
141
- notextile_block := |*
142
- EOF {
143
- ADD_BLOCK();
144
- fgoto main;
145
- };
146
- double_return {
147
- if (IS_NOT_EXTENDED()) {
148
- ADD_BLOCK();
149
- CAT(html);
150
- fgoto main;
151
- } else {
152
- CAT(block);
153
- ADD_EXTENDED_BLOCK();
154
- CAT(html);
155
- }
156
- };
157
- double_return next_block_start {
158
- if (IS_NOT_EXTENDED()) {
159
- ADD_BLOCK();
160
- CAT(html);
161
- fgoto main;
162
- } else {
163
- CAT(block);
164
- ADD_EXTENDED_BLOCK();
165
- END_EXTENDED();
166
- fgoto main;
167
- }
168
- };
169
- default => cat;
170
- *|;
171
-
172
- html := |*
173
- html_end { ADD_BLOCK(); fgoto main; };
174
- default => cat;
175
- *|;
176
-
177
- bc := |*
178
- EOF {
179
- ADD_BLOCKCODE();
180
- INLINE(html, "bc_close");
181
- SET_PLAIN_BLOCK("p");
182
- fgoto main;
183
- };
184
- double_return {
185
- if (IS_NOT_EXTENDED()) {
186
- ADD_BLOCKCODE();
187
- INLINE(html, "bc_close");
188
- SET_PLAIN_BLOCK("p");
189
- fgoto main;
190
- } else {
191
- ADD_EXTENDED_BLOCKCODE();
192
- CAT(html);
193
- }
194
- };
195
- double_return next_block_start {
196
- if (IS_NOT_EXTENDED()) {
197
- ADD_BLOCKCODE();
198
- INLINE(html, "bc_close");
199
- SET_PLAIN_BLOCK("p");
200
- fgoto main;
201
- } else {
202
- ADD_EXTENDED_BLOCKCODE();
203
- CAT(html);
204
- INLINE(html, "bc_close");
205
- SET_PLAIN_BLOCK("p");
206
- END_EXTENDED();
207
- fgoto main;
208
- }
209
- };
210
- default => esc_pre;
211
- *|;
212
-
213
- bq := |*
214
- EOF {
215
- ADD_BLOCK();
216
- INLINE(html, "bq_close");
217
- fgoto main;
218
- };
219
- double_return {
220
- if (IS_NOT_EXTENDED()) {
221
- ADD_BLOCK();
222
- INLINE(html, "bq_close");
223
- fgoto main;
224
- } else {
225
- ADD_EXTENDED_BLOCK();
226
- }
227
- };
228
- double_return next_block_start {
229
- if (IS_NOT_EXTENDED()) {
230
- ADD_BLOCK();
231
- INLINE(html, "bq_close");
232
- fgoto main;
233
- } else {
234
- ADD_EXTENDED_BLOCK();
235
- INLINE(html, "bq_close");
236
- END_EXTENDED();
237
- fgoto main;
238
- }
239
- };
240
- html_end_terminating_block {
241
- if (IS_NOT_EXTENDED()) {
242
- ADD_BLOCK();
243
- INLINE(html, "bq_close");
244
- fgoto main;
245
- } else {
246
- ADD_EXTENDED_BLOCK();
247
- INLINE(html, "bq_close");
248
- END_EXTENDED();
249
- fgoto main;
250
- }
251
- };
252
- default => cat;
253
- *|;
254
-
255
- bb_pre_tag := |*
256
- bb_pre_tag_end {
257
- rb_hash_aset(regs, ID2SYM(rb_intern("text")), rb_funcall(self, rb_intern("escape_pre"), 1, block));
258
- rb_str_append(html,rb_funcall(self, rb_intern("bb_block_pre"), 1, regs));
259
- extend = Qnil;
260
- CLEAR(block);
261
- CLEAR_REGS();
262
- fgoto main;
263
- };
264
- default => cat;
265
- EOF => { CLEAR(block); CLEAR_REGS(); RESET_TYPE(); rb_str_append(block,failed_start); failed_start = STR_NEW2(""); p = failed_start_point_p; ts = failed_start_point_ts; te = failed_start_point_te; fgoto done; };
266
- *|;
267
-
268
- bb_quote_tag := |*
269
- bb_quote_tag_start => { CAT(block); ++nested_quote; };
270
- bb_quote_tag_end {
271
- if (nested_quote-- == 0) {
272
- VALUE cite = ID2SYM(rb_intern("cite"));
273
- if (rb_hash_aref(regs,cite) != Qnil)
274
- rb_hash_aset(regs, cite, redcloth_inline2(self,rb_hash_aref(regs,cite),rb_hash_new()));
275
- rb_hash_aset(regs, ID2SYM(rb_intern("text")), redcloth_transform2(self,block));
276
- rb_str_append(html,rb_funcall(self, rb_intern("bbquote"), 1, regs));
277
- nested_quote = 0;
278
- extend = Qnil;
279
- store_cite = 1;
280
- CLEAR(block);
281
- CLEAR_REGS();
282
- fgoto main;
283
- }
284
- else { CAT(block); }
285
- };
286
- default => cat;
287
- EOF => { CLEAR(block); ADD_BLOCK(); CLEAR_REGS(); RESET_TYPE(); rb_str_append(block,failed_start); failed_start = STR_NEW2(""); p = failed_start_point_p; ts = failed_start_point_ts; te = failed_start_point_te; fgoto done; };
288
- *|;
289
-
290
- bb_spoiler_tag := |*
291
- bb_spoiler_tag_start => { CAT(block); ++nested_spoiler; };
292
- bb_spoiler_tag_end {
293
- if (nested_spoiler-- == 0) {
294
- rb_hash_aset(regs, ID2SYM(rb_intern("text")), redcloth_transform2(self,block));
295
- rb_str_append(html,rb_funcall(self, rb_intern("bb_block_spoiler"), 1, regs));
296
- extend = Qnil;
297
- store_title = 1;
298
- nested_spoiler = 0;
299
- CLEAR(block);
300
- CLEAR_REGS();
301
- fgoto main;
302
- }
303
- else { CAT(block); }
304
- };
305
- default => cat;
306
- EOF => { CLEAR(block); CLEAR_REGS(); RESET_TYPE(); rb_str_append(block,failed_start); failed_start = STR_NEW2(""); p = failed_start_point_p; ts = failed_start_point_ts; te = failed_start_point_te; fgoto done; };
307
- *|;
308
-
309
- block := |*
310
- EOF {
311
- ADD_BLOCK();
312
- fgoto main;
313
- };
314
- double_return {
315
- if (IS_NOT_EXTENDED()) {
316
- ADD_BLOCK();
317
- fgoto main;
318
- } else {
319
- ADD_EXTENDED_BLOCK();
320
- }
321
- };
322
- bb_quote_tag_start {
323
- //printf("bb_quote_tag_start");
324
- if (IS_NOT_EXTENDED()) {
325
- ADD_BLOCK();
326
- failed_start_point_p = p; failed_start_point_ts = ts; failed_start_point_te = te;
327
- fgoto bb_quote_tag;
328
- } else {
329
- ADD_EXTENDED_BLOCK();
330
- END_EXTENDED();
331
- failed_start_point_p = p; failed_start_point_ts = ts; failed_start_point_te = te;
332
- fgoto bb_quote_tag;
333
- }
334
- };
335
- double_return next_block_start {
336
- if (IS_NOT_EXTENDED()) {
337
- ADD_BLOCK();
338
- fgoto main;
339
- } else {
340
- ADD_EXTENDED_BLOCK();
341
- END_EXTENDED();
342
- fgoto main;
343
- }
344
- };
345
- html_end_terminating_block {
346
- if (IS_NOT_EXTENDED()) {
347
- ADD_BLOCK();
348
- fgoto main;
349
- } else {
350
- ADD_EXTENDED_BLOCK();
351
- END_EXTENDED();
352
- fgoto main;
353
- }
354
- };
355
- LF list_start {
356
- ADD_BLOCK();
357
- CLEAR_LIST();
358
- LIST_ITEM();
359
- fgoto list;
360
- };
361
-
362
- default => cat;
363
- *|;
364
-
365
- footnote := |*
366
- block_end { ADD_BLOCK(); fgoto main; };
367
- default => cat;
368
- *|;
369
-
370
- list := |*
371
- LF list_start { ADD_BLOCK(); LIST_ITEM(); };
372
- block_end { ADD_BLOCK(); nest = 0; LIST_CLOSE(); fgoto main; };
373
- default => cat;
374
- *|;
375
-
376
- dl := |*
377
- LF dt_start { ADD_BLOCK(); ASET("type", "dt"); };
378
- dd_start { ADD_BLOCK(); ASET("type", "dd"); };
379
- long_dd { INLINE(html, "dd"); CLEAR_REGS(); };
380
- block_end { ADD_BLOCK(); INLINE(html, "dl_close"); fgoto main; };
381
- default => cat;
382
- *|;
383
-
384
- done := |*
385
- EOF;
386
- *|;
387
-
388
- main := |*
389
- bb_pre_tag_start { ASET("type", "notextile"); rb_str_append(failed_start,STR_NEW(ts,te-ts)); failed_start_point_p = p; failed_start_point_ts = ts; failed_start_point_te = te; fgoto bb_pre_tag; };
390
- bb_quote_tag_start { rb_str_append(failed_start,STR_NEW(ts,te-ts)); failed_start_point_p = p; failed_start_point_ts = ts; failed_start_point_te = te; store_cite = 0; fgoto bb_quote_tag; };
391
- bb_spoiler_tag_start { rb_str_append(failed_start,STR_NEW(ts,te-ts)); failed_start_point_p = p; failed_start_point_ts = ts; failed_start_point_te = te; store_title = 0; fgoto bb_spoiler_tag; };
392
-
393
- noparagraph_line_start { UNLESS_DISABLED_BLOCK(block,noparagraph_line_start,ASET("type", "ignored_line"); fgoto noparagraph_line;) };
394
- notextile_tag_start { ASET("type", "notextile"); fgoto notextile_tag; };
395
- notextile_block_start { ASET("type", "notextile"); fgoto notextile_block; };
396
- script_tag_start { CAT(block); fgoto script_tag; };
397
- pre_tag_start { ASET("type", "notextile"); CAT(block); fgoto pre_tag; };
398
- pre_block_start { fgoto pre_block; };
399
- standalone_html { ASET("type", "html"); CAT(block); ADD_BLOCK(); };
400
- html_start { ASET("type", "html_block"); fgoto html; };
401
- bc_start { INLINE(html, "bc_open"); ASET("type", "code"); SET_PLAIN_BLOCK("code"); fgoto bc; };
402
- bq_start { INLINE(html, "bq_open"); ASET("type", "p"); fgoto bq; };
403
- block_start { fgoto block; };
404
- footnote_start { fgoto footnote; };
405
- horizontal_rule { INLINE(html, "hr"); };
406
- list_start { CLEAR_LIST(); LIST_ITEM(); fgoto list; };
407
- dl_start { p = ts; INLINE(html, "dl_open"); ASET("type", "dt"); fgoto dl; };
408
- table { INLINE(table, "table_close"); DONE(table); fgoto block; };
409
- #link_alias { UNLESS_DISABLED_INLINE(block,link_alias,STORE_LINK_ALIAS(); DONE(block);) };
410
- aligned_image { RESET_TYPE(); fgoto block; };
411
- redcloth_version { INLINE(html, "redcloth_version"); };
412
- youtube_uri { INLINE(html,"youtube"); };
413
- vimeo_uri { INLINE(html,"vimeo"); };
414
-
415
- blank_line => cat;
416
- default
417
- {
418
- CLEAR_REGS();
419
- RESET_TYPE();
420
- CAT(block);
421
- fgoto block;
422
- };
423
- EOF;
424
- *|;
425
-
426
- }%%;
@@ -1,73 +0,0 @@
1
- class RagelProfiler
2
- MEM_CONVERSION = 1024
3
-
4
- COMMANDS = { :compile => %w(ragel rlgen-cd gcc-4.0 gnumake cc1),
5
- :test => %w(ruby) }
6
-
7
- FIELDS = %w(compile_time compile_max_rss test_time test_max_rss ext_so_size)
8
-
9
- @@results = {}
10
-
11
- def initialize(name)
12
- @name = name
13
- @@results[name] = []
14
- end
15
-
16
- def measure(type)
17
- raise "not a valid type" unless COMMANDS.keys.include?(type)
18
- regex = COMMANDS[type].map {|c| Regexp.escape(c) }.join("|")
19
- t = Thread.new do
20
- Thread.current[:max] = 0
21
- loop do
22
- Thread.current[:max] = [run(regex), Thread.current[:max]].max
23
- sleep 0.5
24
- end
25
- end
26
- begin_time = Time.now
27
- yield
28
- total_time = Time.now - begin_time
29
-
30
- t.kill
31
- store_result(type, "time", total_time)
32
- store_result(type, "max_rss", t[:max])
33
- end
34
-
35
- def ext_size(ext_so)
36
- store_result(:ext_so, "size", File.size(ext_so) / MEM_CONVERSION)
37
- end
38
-
39
- def self.results
40
- out = []
41
- out << "name\t" + FIELDS.join("\t")
42
- @@results.each do |name, results|
43
- out << [name, results ].flatten.join("\t")
44
- end
45
- out.join("\n")
46
- end
47
-
48
- private
49
-
50
- def store_result(type, metric, value)
51
- index = FIELDS.index("#{type.to_s}_#{metric}")
52
- @@results[@name][index] = "%.2f" % value
53
- end
54
-
55
- def run(ps_regex)
56
- ps_command = "ps axucww"
57
- ps_output = `#{ps_command}`
58
- fields = ps_output.to_a.first.downcase.split
59
- memory_index = fields.index("rss")
60
- pid_index = fields.index("pid")
61
- ppid_index = fields.index("ppid")
62
- total = ps_output.grep(/(#{ps_regex})\s+$/i).map do |com|
63
- Float(com.split[memory_index]).abs
64
- end.inject(0) { |s,v| s += v }
65
- if total
66
- return total/MEM_CONVERSION
67
- else
68
- STDERR.puts "Command not found. No processes found matching #{ps_regex}."
69
- end
70
-
71
- end
72
-
73
- end