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.
- data/BBRedCloth.gemspec +8 -8
- data/CHANGELOG +160 -3
- data/Manifest +0 -18
- data/README.textile +17 -2
- data/Rakefile +14 -12
- data/ext/redcloth_scan/redcloth.h +42 -16
- data/ext/redcloth_scan/redcloth_attributes.c +373 -379
- data/ext/redcloth_scan/redcloth_bbcode.c +57 -56
- data/ext/redcloth_scan/redcloth_bbcode_inline.c +22 -21
- data/ext/redcloth_scan/redcloth_inline.c +7488 -9996
- data/ext/redcloth_scan/redcloth_scan.c +22693 -8756
- data/lib/redcloth.rb +7 -0
- data/lib/redcloth/formatters/base.rb +26 -20
- data/lib/redcloth/formatters/html.rb +39 -96
- data/lib/redcloth/formatters/latex.rb +11 -11
- data/lib/redcloth/textile_doc.rb +0 -5
- data/lib/redcloth/version.rb +4 -4
- data/test/basic.yml +118 -13
- data/test/code.yml +15 -7
- data/test/html.yml +38 -1
- data/test/images.yml +51 -0
- data/test/links.yml +35 -1
- data/test/lists.yml +180 -1
- data/test/table.yml +86 -0
- data/test/test_restrictions.rb +0 -4
- data/test/textism.yml +2 -16
- data/test/threshold.yml +4 -19
- metadata +14 -31
- data/ext/mingw-rbconfig.rb +0 -176
- data/ext/redcloth_scan/redcloth_attributes.c.rl +0 -56
- data/ext/redcloth_scan/redcloth_attributes.java.rl +0 -96
- data/ext/redcloth_scan/redcloth_attributes.rl +0 -33
- data/ext/redcloth_scan/redcloth_bbcode.c.rl +0 -60
- data/ext/redcloth_scan/redcloth_bbcode.rl +0 -127
- data/ext/redcloth_scan/redcloth_bbcode_inline.c.rl +0 -72
- data/ext/redcloth_scan/redcloth_bbcode_inline.rl +0 -85
- data/ext/redcloth_scan/redcloth_common.c.rl +0 -19
- data/ext/redcloth_scan/redcloth_common.java.rl +0 -18
- data/ext/redcloth_scan/redcloth_common.rl +0 -111
- data/ext/redcloth_scan/redcloth_inline.c.rl +0 -205
- data/ext/redcloth_scan/redcloth_inline.java.rl +0 -108
- data/ext/redcloth_scan/redcloth_inline.rl +0 -176
- data/ext/redcloth_scan/redcloth_scan.c.rl +0 -236
- data/ext/redcloth_scan/redcloth_scan.java.rl +0 -555
- data/ext/redcloth_scan/redcloth_scan.rl +0 -426
- 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
|
-
}%%;
|
data/extras/ragel_profiler.rb
DELETED
|
@@ -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
|