mediacloth 0.0.3 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +36 -0
- data/lib/mediacloth/mediawikiast.rb +58 -1
- data/lib/mediacloth/mediawikihtmlgenerator.rb +229 -73
- data/lib/mediacloth/mediawikilexer.rb +1030 -656
- data/lib/mediacloth/mediawikilinkhandler.rb +89 -0
- data/lib/mediacloth/mediawikiparams.rb +1 -10
- data/lib/mediacloth/mediawikiparser.rb +939 -409
- data/lib/mediacloth/mediawikiparser.tab.rb +1357 -0
- data/lib/mediacloth/mediawikiparser.y +256 -52
- data/lib/mediacloth/mediawikisignedwikigenerator.rb +42 -0
- data/lib/mediacloth/mediawikitemplatehandler.rb +8 -0
- data/lib/mediacloth/mediawikiwalker.rb +72 -1
- data/lib/mediacloth.rb +33 -10
- data/test/data/ast1 +68 -0
- data/test/data/ast10 +196 -0
- data/test/data/ast11 +34 -0
- data/test/data/ast12 +39 -0
- data/test/data/ast13 +25 -0
- data/test/data/ast14 +13 -0
- data/test/data/ast15 +25 -0
- data/test/data/ast16 +17 -0
- data/test/data/ast17 +9 -0
- data/test/data/ast18 +21 -0
- data/test/data/ast19 +32 -0
- data/test/data/ast2 +4 -0
- data/test/data/ast20 +10 -0
- data/test/data/ast21 +27 -0
- data/test/data/ast22 +22 -0
- data/test/data/ast23 +5 -0
- data/test/data/ast3 +6 -0
- data/test/data/ast4 +122 -0
- data/test/data/ast5 +122 -0
- data/test/data/ast6 +22 -0
- data/test/data/ast7 +143 -0
- data/test/data/ast8 +3 -0
- data/test/data/ast9 +11 -0
- data/test/data/html1 +33 -5
- data/test/data/html10 +31 -27
- data/test/data/html11 +19 -0
- data/test/data/html12 +32 -0
- data/test/data/html13 +29 -0
- data/test/data/html14 +4 -0
- data/test/data/html15 +29 -0
- data/test/data/html16 +28 -0
- data/test/data/html17 +10 -0
- data/test/data/html18 +8 -0
- data/test/data/html19 +27 -0
- data/test/data/html2 +1 -1
- data/test/data/html20 +7 -0
- data/test/data/html21 +5 -0
- data/test/data/html22 +24 -0
- data/test/data/html23 +7 -0
- data/test/data/html3 +1 -1
- data/test/data/html4 +60 -11
- data/test/data/html5 +45 -6
- data/test/data/html6 +5 -5
- data/test/data/html7 +59 -1
- data/test/data/html8 +1 -1
- data/test/data/html9 +10 -2
- data/test/data/input1 +4 -0
- data/test/data/input11 +19 -0
- data/test/data/input12 +32 -0
- data/test/data/input13 +10 -0
- data/test/data/input14 +8 -0
- data/test/data/input15 +10 -0
- data/test/data/input16 +28 -0
- data/test/data/input17 +10 -0
- data/test/data/input18 +16 -0
- data/test/data/input19 +29 -0
- data/test/data/input20 +8 -0
- data/test/data/input21 +18 -0
- data/test/data/input22 +20 -0
- data/test/data/input23 +8 -0
- data/test/data/input4 +13 -1
- data/test/data/input5 +45 -4
- data/test/data/input7 +25 -1
- data/test/data/lex1 +17 -18
- data/test/data/lex10 +57 -87
- data/test/data/lex11 +18 -0
- data/test/data/lex12 +32 -0
- data/test/data/lex13 +3 -0
- data/test/data/lex14 +1 -0
- data/test/data/lex15 +3 -0
- data/test/data/lex16 +27 -0
- data/test/data/lex17 +9 -0
- data/test/data/lex18 +4 -0
- data/test/data/lex19 +27 -0
- data/test/data/lex2 +2 -2
- data/test/data/lex20 +7 -0
- data/test/data/lex21 +4 -0
- data/test/data/lex22 +3 -0
- data/test/data/lex23 +7 -0
- data/test/data/lex3 +1 -1
- data/test/data/lex4 +35 -29
- data/test/data/lex5 +57 -18
- data/test/data/lex6 +7 -7
- data/test/data/lex7 +42 -18
- data/test/data/lex8 +1 -1
- data/test/data/lex9 +6 -6
- data/test/dataproducers/ast.rb +24 -0
- data/test/dataproducers/html.rb +11 -12
- data/test/dataproducers/lex.rb +9 -4
- data/test/debugwalker.rb +25 -11
- data/test/htmlgenerator.rb +170 -13
- data/test/lexer.rb +626 -83
- data/test/linkhandler.rb +39 -0
- data/test/parser.rb +176 -9
- data/test/signedwikigenerator.rb +113 -0
- metadata +158 -79
- data/README +0 -37
- data/lib/mediacloth/mediawikilexer.rb~ +0 -491
- data/lib/mediacloth/mediawikiparser.y~ +0 -210
- data/test/data/result1 +0 -48
- data/test/dataproducers/html.rb~ +0 -24
- data/test/dataproducers/lex.rb~ +0 -15
data/test/data/lex4
CHANGED
@@ -1,47 +1,53 @@
|
|
1
|
-
|
1
|
+
PARA_START[0, 0]TEXTTest mixing of bold and italic formatting:
|
2
2
|
|
3
|
-
|
3
|
+
[0, 44]PARA_END[44, 0]PARA_START[44, 0]ITALIC_START''[44, 2]TEXTitalic[46, 6]BOLD_START'''[52, 3]TEXTbold[55, 4]BOLD_END'''[59, 3]TEXTitalic[62, 6]ITALIC_END''[68, 2]TEXT
|
4
4
|
|
5
|
-
|
5
|
+
[70, 2]PARA_END[72, 0]PARA_START[72, 0]BOLD_START'''[72, 3]TEXTbold[75, 4]ITALIC_START''[79, 2]TEXTitalic[81, 6]ITALIC_END''[87, 2]TEXTbold[89, 4]BOLD_END'''[93, 3]TEXT
|
6
6
|
|
7
|
-
|
7
|
+
[96, 2]PARA_END[98, 0]PARA_START[98, 0]ITALIC_START''[98, 2]BOLD_START'''[100, 3]TEXTboldalic[103, 8]BOLD_END'''[111, 3]ITALIC_END''[114, 2]TEXT
|
8
8
|
|
9
|
-
|
9
|
+
[116, 2]PARA_END[118, 0]PARA_START[118, 0]ITALIC_START''[118, 2]TEXTitalic[120, 6]BOLD_START'''[126, 3]TEXTbold[129, 4]BOLD_END'''[133, 3]TEXTitalic[136, 6]ITALIC_END''[142, 2]BOLD_START'''[144, 3]TEXTbold[147, 4]ITALIC_START''[151, 2]TEXTitalic[153, 6]ITALIC_END''[159, 2]TEXTbold[161, 4]BOLD_END'''[165, 3]TEXT
|
10
10
|
|
11
|
-
|
12
|
-
Test bold and italic wrapped around inline links:
|
11
|
+
[168, 2]PARA_END[170, 0]PARA_START[170, 0]TEXT
|
12
|
+
Test bold and italic wrapped around inline links:
|
13
13
|
|
14
|
-
|
14
|
+
[170, 52]PARA_END[222, 0]PARA_START[222, 0]ITALIC_START''[222, 2]LINK_START[224, 0]TEXThttp://example.com[224, 18]LINK_END[242, 0]ITALIC_END''[242, 2]TEXT
|
15
15
|
|
16
|
-
|
16
|
+
[244, 2]PARA_END[246, 0]PARA_START[246, 0]BOLD_START'''[246, 3]LINK_START[249, 0]TEXThttp://example.com[249, 18]LINK_END[267, 0]BOLD_END'''[267, 3]TEXT
|
17
17
|
|
18
|
-
|
18
|
+
[270, 2]PARA_END[272, 0]PARA_START[272, 0]ITALIC_START''[272, 2]LINK_START[274, 0]TEXThttp://example.com[274, 18]LINK_END[292, 0]BOLD_START'''[292, 3]TEXT
|
19
19
|
|
20
|
-
|
20
|
+
[295, 2]BOLD_END[297, 0]ITALIC_END[297, 0]PARA_END[297, 0]PARA_START[297, 0]BOLD_START'''[297, 3]LINK_START[300, 0]TEXThttp://example.com[300, 18]LINK_END[318, 0]TEXT' is good[318, 9]BOLD_END'''[327, 3]TEXT
|
21
21
|
|
22
|
-
|
22
|
+
[330, 2]PARA_END[332, 0]PARA_START[332, 0]ITALIC_START''[332, 2]LINK_START[334, 0]TEXThttp://example.com[334, 18]LINK_END[352, 0]TEXT' is good[352, 9]ITALIC_END''[361, 2]TEXT
|
23
23
|
|
24
|
-
|
25
|
-
Test unclosed bold and italic formatting:
|
24
|
+
[363, 2]PARA_END[365, 0]PARA_START[365, 0]TEXT
|
25
|
+
Test unclosed bold and italic formatting:
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
TextPARA_END
|
27
|
+
[365, 44]PARA_END[409, 0]PARA_START[409, 0]ITALIC_START''[409, 2]TEXTSome italic and now [411, 20]ITALIC_END''[431, 2]TEXTbold
|
28
|
+
[433, 5]PARA_END[438, 0]SECTION_START==[438, 2]TEXTHeading[440, 7]SECTION_END==[447, 0]PARA_START[447, 3]TEXTText
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
[450, 6]PARA_END[456, 0]PARA_START[456, 1]ITALIC_START''[457, 2]TEXTSome italic and now [459, 20]BOLD_START'''[479, 3]TEXTbold
|
31
|
+
[482, 5]BOLD_END[487, 0]ITALIC_END[487, 0]PARA_END[487, 0]SECTION_START==[487, 2]TEXTHeading[489, 7]SECTION_END==[496, 0]PARA_START[496, 3]TEXT
|
32
|
+
Text
|
34
33
|
|
35
|
-
|
34
|
+
[499, 7]PARA_END[506, 0]PARA_START[506, 1]ITALIC_START''[507, 2]TEXTSome italic and now [509, 20]BOLD_START'''[529, 3]TEXTbold
|
36
35
|
|
37
|
-
|
38
|
-
TextPARA_END
|
36
|
+
[532, 6]BOLD_END[538, 0]ITALIC_END[538, 0]PARA_END[538, 0]SECTION_START==[538, 2]TEXTHeading[540, 7]SECTION_END==[547, 0]PARA_START[547, 3]TEXT
|
39
37
|
|
40
|
-
|
41
|
-
BOLDENDITALICENDPARA_ENDUL_STARTLI_STARTTEXTone
|
42
|
-
LI_ENDLI_STARTTEXTtwo
|
43
|
-
LI_ENDUL_ENDPARA_STARTPARA_END
|
38
|
+
[550, 2]PARA_END[552, 0]PARA_START[552, 0]TEXTText
|
44
39
|
|
45
|
-
|
40
|
+
[552, 6]PARA_END[558, 0]PARA_START[558, 1]ITALIC_START''[559, 2]TEXTSome italic and now [561, 20]BOLD_START'''[581, 3]TEXTbold
|
41
|
+
[584, 5]BOLD_END[589, 0]ITALIC_END[589, 0]PARA_END[589, 0]UL_START[589, 0]LI_START[589, 1]TEXT one
|
42
|
+
[590, 5]LI_END[595, 0]LI_START[595, 1]TEXT two
|
43
|
+
[596, 5]LI_END[601, 0]UL_END[601, 0]PARA_START[601, 0]TEXT
|
46
44
|
|
47
|
-
|
45
|
+
[601, 2]PARA_END[603, 0]PARA_START[603, 0]ITALIC_START''[603, 2]TEXTSome italic and now [605, 20]BOLD_START'''[625, 3]TEXTbold
|
46
|
+
|
47
|
+
[628, 6]BOLD_END[634, 0]ITALIC_END[634, 0]PARA_END[634, 0]PARA_START[634, 0]TEXTText
|
48
|
+
|
49
|
+
[634, 6]PARA_END[640, 0]PARA_START[640, 0]TEXTInvalid and weird sections:
|
50
|
+
[640, 28]PARA_END[668, 0]SECTION_START======[668, 6]TEXT====[674, 4]SECTION_END======[678, 0]PARA_START[678, 6]TEXT
|
51
|
+
=
|
52
|
+
==
|
53
|
+
[684, 6]PARA_END[690, 0]SECTION_START=[690, 1]TEXT=[691, 1]SECTION_END=[692, 2]SECTION_START=[694, 1]TEXT==[695, 2]SECTION_END=[697, 2]SECTION_START==[699, 2]TEXT=[701, 1]SECTION_END==[702, 3]SECTION_START==[705, 2]TEXT==[707, 2]SECTION_END==[709, 3]falsefalse[712, 0]
|
data/test/data/lex5
CHANGED
@@ -1,18 +1,57 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
1
|
+
PARA_START[0, 0]TEXTUnordered lists
|
2
|
+
|
3
|
+
[0, 17]PARA_END[17, 0]UL_START[17, 0]LI_START[17, 1]TEXTA
|
4
|
+
[18, 2]UL_START[20, 0]LI_START[20, 2]TEXTA
|
5
|
+
[22, 2]UL_START[24, 0]LI_START[24, 3]TEXTa
|
6
|
+
[27, 2]LI_END[29, 0]LI_START[29, 3]TEXTb
|
7
|
+
[32, 2]UL_START[34, 0]LI_START[34, 4]TEXTa
|
8
|
+
[38, 2]LI_END[40, 0]UL_END[40, 0]LI_END[40, 0]UL_END[40, 0]LI_END[40, 0]UL_END[40, 0]LI_END[40, 0]LI_START[40, 1]TEXTB
|
9
|
+
[41, 2]UL_START[43, 0]LI_START[43, 2]TEXTb
|
10
|
+
[45, 2]LI_END[47, 0]UL_END[47, 0]LI_END[47, 0]UL_END[47, 1]UL_START[48, 0]LI_START[48, 1]TEXTA
|
11
|
+
[49, 2]LI_END[51, 0]LI_START[51, 1]TEXTB
|
12
|
+
[52, 2]LI_END[54, 0]LI_START[54, 2]LI_END[56, 0]UL_END[56, 0]PARA_START[56, 0]TEXT
|
13
|
+
Ordered lists
|
14
|
+
|
15
|
+
[56, 16]PARA_END[72, 0]OL_START[72, 0]LI_START[72, 1]TEXTa
|
16
|
+
[73, 2]OL_START[75, 0]LI_START[75, 2]TEXTa
|
17
|
+
[77, 2]OL_START[79, 0]LI_START[79, 3]TEXTa
|
18
|
+
[82, 2]OL_START[84, 0]LI_START[84, 4]TEXTa
|
19
|
+
[88, 2]LI_END[90, 0]OL_END[90, 0]LI_END[90, 0]OL_END[90, 0]LI_END[90, 0]OL_END[90, 0]LI_END[90, 0]LI_START[90, 1]TEXTa
|
20
|
+
[91, 2]OL_START[93, 0]LI_START[93, 2]TEXTaa
|
21
|
+
[95, 3]LI_END[98, 0]OL_END[98, 0]LI_END[98, 0]OL_END[98, 1]OL_START[99, 0]LI_START[99, 1]TEXTA
|
22
|
+
[100, 2]LI_END[102, 0]LI_START[102, 1]TEXTB
|
23
|
+
[103, 2]LI_END[105, 0]LI_START[105, 2]LI_END[107, 0]OL_END[107, 0]PARA_START[107, 0]TEXT
|
24
|
+
Mixed lists
|
25
|
+
|
26
|
+
[107, 14]PARA_END[121, 0]UL_START[121, 0]LI_START[121, 1]TEXTa
|
27
|
+
[122, 2]OL_START[124, 0]LI_START[124, 2]TEXT1
|
28
|
+
[126, 2]LI_END[128, 0]LI_START[128, 2]TEXT2
|
29
|
+
[130, 2]LI_END[132, 0]OL_END[132, 0]LI_END[132, 0]LI_START[132, 1]TEXTb
|
30
|
+
[133, 2]LI_END[135, 0]UL_END[135, 1]OL_START[136, 0]LI_START[136, 1]TEXTa
|
31
|
+
[137, 2]UL_START[139, 0]LI_START[139, 2]TEXT1
|
32
|
+
[141, 2]LI_END[143, 0]LI_START[143, 2]TEXT2
|
33
|
+
[145, 2]UL_START[147, 0]LI_START[147, 3]TEXT2
|
34
|
+
[150, 2]LI_END[152, 0]UL_END[152, 0]LI_END[152, 0]UL_END[152, 0]LI_END[152, 0]LI_START[152, 1]TEXTb
|
35
|
+
[153, 2]LI_END[155, 0]OL_END[155, 0]PARA_START[155, 0]TEXT
|
36
|
+
Dictionary lists
|
37
|
+
|
38
|
+
[155, 19]PARA_END[174, 0]DL_START[174, 0]DT_START;[174, 1]TEXTd
|
39
|
+
[175, 2]DT_END[177, 0]DL_END[177, 0]PARA_START[177, 0]TEXT
|
40
|
+
|
41
|
+
[177, 2]PARA_END[179, 0]DL_START[179, 0]DD_START:[179, 1]TEXTt
|
42
|
+
[180, 2]DD_END[182, 0]DL_END[182, 0]PARA_START[182, 0]TEXT
|
43
|
+
|
44
|
+
[182, 2]PARA_END[184, 0]DL_START[184, 0]DT_START;[184, 1]TEXTd
|
45
|
+
[185, 2]DT_END[187, 0]DD_START:[187, 1]TEXTt
|
46
|
+
[188, 2]DD_END[190, 0]DL_END[190, 0]PARA_START[190, 0]TEXT
|
47
|
+
|
48
|
+
[190, 2]PARA_END[192, 0]DL_START[192, 0]DT_START;[192, 1]TEXTd
|
49
|
+
[193, 2]DT_END[195, 0]DD_START:[195, 1]TEXTt
|
50
|
+
[196, 2]DD_END[198, 0]DD_START:[198, 1]TEXTt
|
51
|
+
[199, 2]DD_END[201, 0]DL_END[201, 0]PARA_START[201, 0]TEXT
|
52
|
+
|
53
|
+
[201, 2]PARA_END[203, 0]DL_START[203, 0]DT_START;[203, 1]TEXTd
|
54
|
+
[204, 2]DT_END[206, 0]DD_START:[206, 1]TEXTt
|
55
|
+
[207, 2]DD_END[209, 0]DL_END[209, 0]DL_START[209, 0]DT_START;[209, 1]TEXTd
|
56
|
+
[210, 2]DT_END[212, 0]DD_START:[212, 1]TEXTt
|
57
|
+
[213, 2]DD_END[215, 0]DL_END[215, 1]DL_START[216, 0]DT_START;[216, 1]TEXTd [217, 2]DT_END[219, 0]DD_START:[219, 1]TEXTt [220, 2]INTLINK_START[[[222, 2]TEXTimage[224, 5]RESOURCESEP:[229, 1]TEXTfoo.jpg[230, 7]INTLINK_END]][237, 2]DD_END[239, 0]DL_END[239, 0]falsefalse[239, 0]
|
data/test/data/lex6
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
PARA_START[0, 0]TEXTThis is some text with [0, 23]BOLD_START'''[23, 3]TEXTbold[26, 4]BOLD_END'''[30, 3]TEXT and [33, 5]ITALIC_START''[38, 2]TEXTitalic[40, 6]ITALIC_END''[46, 2]TEXT formating.
|
2
2
|
The list is also here:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
[48, 35]PARA_END[83, 0]UL_START[83, 0]LI_START[83, 1]TEXT List Item 1
|
4
|
+
[84, 13]UL_START[97, 0]LI_START[97, 2]TEXT Sub list item 1
|
5
|
+
[99, 17]LI_END[116, 0]LI_START[116, 2]TEXT Sub list item 2
|
6
|
+
[118, 17]LI_END[135, 0]UL_END[135, 0]LI_END[135, 0]LI_START[135, 1]TEXT List Item 2
|
7
|
+
[136, 13]LI_END[149, 0]UL_END[149, 0]PARA_START[149, 0]TEXTThe end
|
8
|
+
[149, 8]PARA_END[157, 0]HLINE----[157, 4]falsefalse[162, 0]
|
data/test/data/lex7
CHANGED
@@ -1,35 +1,59 @@
|
|
1
|
-
|
1
|
+
PARA_START[0, 0]LINK_START[0, 0]TEXThttp://sun.com[0, 14]LINK_END[14, 0]TEXT
|
2
2
|
|
3
|
-
|
3
|
+
[14, 2]PARA_END[16, 0]PARA_START[16, 0]LINK_START[16, 0]TEXThttp://sun.com:80[16, 17]LINK_END[33, 0]TEXT
|
4
4
|
|
5
|
-
|
5
|
+
[33, 2]PARA_END[35, 0]PARA_START[35, 0]LINK_START[[35, 1]TEXThttp://sun.com[36, 14]LINK_END][50, 1]TEXT
|
6
6
|
|
7
|
-
|
7
|
+
[51, 2]PARA_END[53, 0]PARA_START[53, 0]LINK_START[[53, 1]TEXTmailto:joe@sun.com[54, 18]LINK_END][72, 1]TEXT
|
8
8
|
|
9
|
-
|
9
|
+
[73, 2]PARA_END[75, 0]PARA_START[75, 0]LINK_START[[75, 1]TEXThttp://sun.com[76, 14]LINKSEP [90, 1]TEXTstars[91, 5]LINK_END][96, 1]TEXT
|
10
10
|
|
11
|
-
|
11
|
+
[97, 2]PARA_END[99, 0]PARA_START[99, 0]LINK_START[[99, 1]TEXThttp://sun.com[100, 14]LINKSEP [114, 1]TEXTstars and moon[115, 14]LINK_END][129, 1]TEXT
|
12
12
|
|
13
|
-
|
13
|
+
[130, 2]PARA_END[132, 0]PARA_START[132, 0]LINK_START[[132, 1]TEXThttp://sun.com[133, 14]LINKSEP [147, 1]TEXTstars and [148, 10]ITALIC_START''[158, 2]TEXTmoon[160, 4]ITALIC_END''[164, 2]TEXT and [166, 5]BOLD_START'''[171, 3]TEXTtrees[174, 5]BOLD_END'''[179, 3]TEXT and birds[182, 10]LINK_END][192, 1]TEXT
|
14
14
|
|
15
|
-
|
15
|
+
[193, 2]PARA_END[195, 0]PARA_START[195, 0]LINK_START[[195, 1]TEXThttp://sun.com[196, 14]LINKSEP [210, 1]TAG_STARTtt[211, 4]TEXTsun[215, 3]TAG_ENDtt[218, 5]TEXT and [223, 5]TAG_STARTtt[228, 4]TEXTmoon[232, 4]TAG_ENDtt[236, 5]LINK_END][241, 1]TEXT
|
16
16
|
|
17
|
-
|
17
|
+
[242, 2]PARA_END[244, 0]PARA_START[244, 0]LINK_START[[244, 1]TEXThttp://sun.com[245, 14]LINKSEP [259, 1]TEXTsun > moon[260, 10]LINK_END][270, 1]TEXT
|
18
18
|
|
19
|
-
|
19
|
+
[271, 2]PARA_END[273, 0]PARA_START[273, 0]INTLINK_START[[[273, 2]TEXTsun[275, 3]INTLINK_END]][278, 2]TEXT
|
20
20
|
|
21
|
-
|
21
|
+
[280, 2]PARA_END[282, 0]PARA_START[282, 0]INTLINK_START[[[282, 2]TEXTsun[284, 3]INTLINKSEP|[287, 1]TEXTAll about Sun[288, 13]INTLINK_END]][301, 2]TEXT
|
22
22
|
|
23
|
-
|
23
|
+
[303, 2]PARA_END[305, 0]PARA_START[305, 0]INTLINK_START[[[305, 2]TEXTimage[307, 5]RESOURCESEP:[312, 1]TEXTsun[313, 3]INTLINKSEP|[316, 1]TEXTAll about Sun[317, 13]INTLINK_END]][330, 2]TEXT
|
24
24
|
|
25
|
-
|
25
|
+
[332, 2]PARA_END[334, 0]PARA_START[334, 0]INTLINK_START[[[334, 2]TEXTsun[336, 3]INTLINKSEP|[339, 1]TEXTnofollow|All about Sun[340, 22]INTLINK_END]][362, 2]TEXT
|
26
26
|
|
27
|
-
|
27
|
+
[364, 2]PARA_END[366, 0]PARA_START[366, 0]INTLINK_START[[[366, 2]TEXTsun[368, 3]INTLINKSEP|[371, 1]TEXTnofollow|Sun > Moon[372, 19]INTLINK_END]][391, 2]TEXT
|
28
28
|
|
29
|
-
|
29
|
+
[393, 2]PARA_END[395, 0]PARA_START[395, 0]INTLINK_START[[[395, 2]TEXTsun[397, 3]INTLINKSEP|[400, 1]TEXTnofollow|[401, 9]TAG_STARTtt[410, 4]TEXTsun[414, 3]TAG_ENDtt[417, 5]TEXT and [422, 5]TAG_STARTtt[427, 4]TEXTmoon[431, 4]TAG_ENDtt[435, 5]INTLINK_END]][440, 2]TEXT
|
30
30
|
|
31
|
-
|
31
|
+
[442, 2]PARA_END[444, 0]PARA_START[444, 0]INTLINK_START[[[444, 2]TEXTimage[446, 5]RESOURCESEP:[451, 1]TEXTsun[452, 3]INTLINKSEP|[455, 1]TEXTnofollow[456, 8]INTLINKSEP|[464, 1]TEXTAll about Sun[465, 13]INTLINK_END]][478, 2]TEXT
|
32
32
|
|
33
|
-
|
33
|
+
[480, 2]PARA_END[482, 0]PARA_START[482, 0]INTLINK_START[[[482, 2]TEXTimage[484, 5]RESOURCESEP:[489, 1]TEXTsun[490, 3]INTLINKSEP|[493, 1]TEXTAll about [494, 10]INTLINK_START[[[504, 2]TEXTSun[506, 3]INTLINK_END]][509, 2]INTLINK_END]][511, 2]TEXT
|
34
34
|
|
35
|
-
|
35
|
+
[513, 2]PARA_END[515, 0]PARA_START[515, 0]INTLINK_START[[[515, 2]TEXTimage[517, 5]RESOURCESEP:[522, 1]TEXTsun[523, 3]INTLINKSEP|[526, 1]TEXTAll about [527, 10]INTLINK_START[[[537, 2]TEXTsun[539, 3]INTLINKSEP|[542, 1]TEXTMore about[543, 10]INTLINK_END]][553, 2]INTLINK_END]][555, 2]TEXT
|
36
|
+
|
37
|
+
[557, 2]PARA_END[559, 0]PARA_START[559, 0]INTLINK_START[[[559, 2]TEXTimage[561, 5]RESOURCESEP:[566, 1]TEXTsun[567, 3]INTLINKSEP|[570, 1]TEXTone[571, 3]INTLINKSEP|[574, 1]INTLINKSEP|[575, 1]TEXTtwo[576, 3]INTLINKSEP|[579, 1]INTLINKSEP|[580, 1]TEXTthree[581, 5]INTLINKSEP|[586, 1]INTLINK_END]][587, 2]TEXT
|
38
|
+
|
39
|
+
[589, 2]PARA_END[591, 0]PARA_START[591, 0]INTLINK_START[[[591, 2]TEXTimage[593, 5]RESOURCESEP:[598, 1]TEXTsun[599, 3]INTLINKSEP|[602, 1]TEXTone[603, 3]INTLINKSEP|[606, 1]INTLINK_START[[[607, 2]TEXTaaa[609, 3]INTLINKSEP|[612, 1]TEXTbbb|ccc[613, 7]INTLINK_END]][620, 2]INTLINKSEP|[622, 1]INTLINK_START[[[623, 2]TEXTimage[625, 5]RESOURCESEP:[630, 1]TEXTmoon[631, 4]INTLINKSEP|[635, 1]TEXTaaa[636, 3]INTLINKSEP|[639, 1]TEXTbbb[640, 3]INTLINKSEP|[643, 1]TEXTccc[644, 3]INTLINK_END]][647, 2]INTLINKSEP|[649, 1]TEXTtwo[650, 3]INTLINK_END]][653, 2]TEXT
|
40
|
+
|
41
|
+
[655, 2]PARA_END[657, 0]PARA_START[657, 0]TEXT[]
|
42
|
+
|
43
|
+
[657, 4]PARA_END[661, 0]PARA_START[661, 0]TEXT[ ]
|
44
|
+
|
45
|
+
[661, 5]PARA_END[666, 0]PARA_START[666, 0]TEXT[[]]
|
46
|
+
|
47
|
+
[666, 6]PARA_END[672, 0]PARA_START[672, 0]INTLINK_START[[[672, 2]TEXT [674, 1]INTLINK_END]][675, 2]TEXT
|
48
|
+
|
49
|
+
[677, 2]PARA_END[679, 0]PARA_START[679, 0]INTLINK_START[[[679, 2]CATEGORYCategory:[681, 9]TEXTCategory[690, 8]INTLINK_END]][698, 2]TEXT
|
50
|
+
|
51
|
+
[700, 2]PARA_END[702, 0]PARA_START[702, 0]INTLINK_START[[[702, 2]CATEGORYCategory:[704, 9]TEXTCategory name[713, 13]INTLINK_END]][726, 2]TEXT
|
52
|
+
|
53
|
+
[728, 2]PARA_END[730, 0]PARA_START[730, 0]INTLINK_START[[[730, 2]CATEGORYCategory:[732, 9]TEXTCategory name[741, 13]INTLINKSEP|[754, 1]TEXTSort as[755, 7]INTLINK_END]][762, 2]TEXT
|
54
|
+
|
55
|
+
[764, 2]PARA_END[766, 0]PARA_START[766, 0]INTLINK_START[[[766, 2]RESOURCESEP:[768, 1]CATEGORYCategory:[769, 9]TEXTCategory[778, 8]INTLINK_END]][786, 2]TEXT
|
56
|
+
|
57
|
+
[788, 2]PARA_END[790, 0]PARA_START[790, 0]INTLINK_START[[[790, 2]RESOURCESEP:[792, 1]CATEGORYCategory:[793, 9]TEXTCategory name[802, 13]INTLINK_END]][815, 2]TEXT
|
58
|
+
|
59
|
+
[817, 2]PARA_END[819, 0]PARA_START[819, 0]INTLINK_START[[[819, 2]RESOURCESEP:[821, 1]CATEGORYCategory:[822, 9]TEXTCategory name[831, 13]INTLINKSEP|[844, 1]TEXTFoo[845, 3]INTLINK_END]][848, 2]PARA_END[850, 0]falsefalse[850, 0]
|
data/test/data/lex8
CHANGED
@@ -1 +1 @@
|
|
1
|
-
SECTION_START===TEXT foo SECTION_END===falsefalse
|
1
|
+
SECTION_START===[0, 3]TEXT foo [3, 5]SECTION_END===[8, 3]falsefalse[11, 0]
|
data/test/data/lex9
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
PARA_START[0, 0]TEXTSome examples of wiki escaping.
|
2
2
|
|
3
|
-
|
3
|
+
[0, 33]PARA_END[33, 0]PARA_START[33, 0]TEXTA paragraph with some wiki characters: ''italic'' '''bold''' [[Link]]
|
4
4
|
|
5
|
-
|
5
|
+
[33, 71]PARA_END[121, 0]PARA_START[121, 0]TEXTAn escaped list:
|
6
6
|
|
7
7
|
* one
|
8
8
|
* two
|
9
9
|
* three
|
10
|
-
PARA_END
|
11
10
|
|
12
|
-
PARA_STARTTEXTText escaped in a heading:PARA_END
|
13
11
|
|
14
|
-
|
12
|
+
[121, 40]PARA_END[178, 0]PARA_START[178, 0]TEXTText escaped in a heading:
|
13
|
+
|
14
|
+
[178, 28]PARA_END[206, 0]SECTION_START==[206, 2]TEXTHeading with '''[208, 16]SECTION_END==[241, 3]falsefalse[244, 0]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mediacloth/mediawikilexer'
|
2
|
+
require 'mediacloth/mediawikiparser'
|
3
|
+
require 'debugwalker'
|
4
|
+
|
5
|
+
def produce(index)
|
6
|
+
file = File.new("#{File.dirname(__FILE__)}/../data/ast#{index}", "w")
|
7
|
+
inputFile = File.new("#{File.dirname(__FILE__)}/../data/input#{index}", "r")
|
8
|
+
input = inputFile.read
|
9
|
+
|
10
|
+
parser = MediaWikiParser.new
|
11
|
+
parser.lexer = MediaWikiLexer.new
|
12
|
+
ast = parser.parse(input)
|
13
|
+
walker = DebugWalker.new
|
14
|
+
walker.parse(ast)
|
15
|
+
|
16
|
+
file.write(walker.tree)
|
17
|
+
file.close
|
18
|
+
end
|
19
|
+
|
20
|
+
if ARGV.empty?
|
21
|
+
(1..21).each { |i| produce(i) }
|
22
|
+
else
|
23
|
+
produce ARGV[0].to_i
|
24
|
+
end
|
data/test/dataproducers/html.rb
CHANGED
@@ -1,24 +1,23 @@
|
|
1
|
-
require 'mediacloth
|
2
|
-
require 'mediacloth/mediawikiparser'
|
3
|
-
require 'mediacloth/mediawikiparams'
|
4
|
-
require 'mediacloth/mediawikihtmlgenerator'
|
1
|
+
require 'mediacloth'
|
5
2
|
|
6
3
|
def produce(index)
|
7
|
-
file = File.new("
|
8
|
-
inputFile = File.new("
|
4
|
+
file = File.new("#{File.dirname(__FILE__)}/../data/html#{index}", "w")
|
5
|
+
inputFile = File.new("#{File.dirname(__FILE__)}/../data/input#{index}", "r")
|
9
6
|
input = inputFile.read
|
10
|
-
|
11
7
|
parser = MediaWikiParser.new
|
12
8
|
parser.lexer = MediaWikiLexer.new
|
13
9
|
ast = parser.parse(input)
|
14
|
-
|
10
|
+
params = MediaWikiParams.new
|
11
|
+
params.time = Time.mktime(2000, 1, 1, 1, 1, 1, 1)
|
15
12
|
generator = MediaWikiHTMLGenerator.new
|
13
|
+
generator.params = params
|
16
14
|
generator.parse(ast)
|
17
|
-
|
18
|
-
# puts generator.html
|
19
15
|
file.write(generator.html)
|
20
16
|
file.close
|
21
17
|
end
|
22
18
|
|
23
|
-
|
24
|
-
produce(
|
19
|
+
if ARGV.empty?
|
20
|
+
(1..13).each { |i| produce(i) }
|
21
|
+
else
|
22
|
+
produce ARGV[0].to_i
|
23
|
+
end
|
data/test/dataproducers/lex.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'mediacloth/mediawikilexer'
|
2
2
|
|
3
|
+
puts
|
4
|
+
|
3
5
|
def produce(index)
|
4
|
-
file = File.new("
|
5
|
-
inputFile = File.new("
|
6
|
+
file = File.new("#{File.dirname(__FILE__)}/../data/lex#{index}", "w")
|
7
|
+
inputFile = File.new("#{File.dirname(__FILE__)}/../data/input#{index}", "r")
|
6
8
|
input = inputFile.read
|
7
9
|
|
8
10
|
lexer = MediaWikiLexer.new
|
@@ -11,5 +13,8 @@ def produce(index)
|
|
11
13
|
file.close
|
12
14
|
end
|
13
15
|
|
14
|
-
|
15
|
-
produce(
|
16
|
+
if ARGV.empty?
|
17
|
+
(1..13).each { |i| produce(i) }
|
18
|
+
else
|
19
|
+
produce ARGV[0].to_i
|
20
|
+
end
|
data/test/debugwalker.rb
CHANGED
@@ -17,18 +17,16 @@ class DebugWalker < MediaWikiWalker
|
|
17
17
|
def initialize
|
18
18
|
super
|
19
19
|
@tree = ""
|
20
|
+
@left_space = 0
|
20
21
|
end
|
21
22
|
|
22
23
|
protected
|
23
24
|
|
24
25
|
def parse_wiki_ast(ast)
|
25
26
|
info(ast)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
def parse_paragraph(ast)
|
30
|
-
info(ast)
|
31
|
-
super(ast)
|
27
|
+
@left_space += 1
|
28
|
+
super(ast) if ast.children
|
29
|
+
@left_space -= 1
|
32
30
|
end
|
33
31
|
|
34
32
|
def parse_text(ast)
|
@@ -38,26 +36,42 @@ protected
|
|
38
36
|
|
39
37
|
def parse_list(ast)
|
40
38
|
info(ast, ast.class)
|
39
|
+
@left_space += 1
|
41
40
|
super(ast)
|
41
|
+
@left_space -= 1
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
44
|
+
def parse_internal_link(ast)
|
45
45
|
info(ast)
|
46
|
-
|
46
|
+
@left_space += 1
|
47
|
+
ast.children.map do |c|
|
48
|
+
parse_wiki_ast(c)
|
49
|
+
end
|
50
|
+
@left_space -= 1
|
47
51
|
end
|
48
52
|
|
49
|
-
def
|
53
|
+
def parse_resource_link(ast)
|
50
54
|
info(ast)
|
55
|
+
@left_space += 1
|
56
|
+
ast.children.map do |c|
|
57
|
+
parse_wiki_ast(c)
|
58
|
+
end
|
59
|
+
@left_space -= 1
|
51
60
|
end
|
52
61
|
|
53
|
-
def
|
62
|
+
def parse_category_link(ast)
|
54
63
|
info(ast)
|
64
|
+
@left_space += 1
|
65
|
+
ast.children.map do |c|
|
66
|
+
parse_wiki_ast(c)
|
67
|
+
end
|
68
|
+
@left_space -= 1
|
55
69
|
end
|
56
70
|
|
57
71
|
private
|
58
72
|
#Pretty-print ast node information
|
59
73
|
def info(ast, *args)
|
60
|
-
@tree += "#{ast.class}"
|
74
|
+
@tree += "#{" " * @left_space}#{ast.class}[#{ast.index}, #{ast.length}]"
|
61
75
|
if args.length > 0
|
62
76
|
@tree += ": "
|
63
77
|
args.each { |arg| @tree += "#{arg} " }
|
data/test/htmlgenerator.rb
CHANGED
@@ -1,26 +1,183 @@
|
|
1
1
|
require 'mediacloth/mediawikilexer'
|
2
2
|
require 'mediacloth/mediawikiparser'
|
3
3
|
require 'mediacloth/mediawikihtmlgenerator'
|
4
|
+
require 'mediacloth/mediawikilinkhandler'
|
5
|
+
require 'mediacloth/mediawikitemplatehandler'
|
4
6
|
|
5
7
|
require 'test/unit'
|
6
8
|
require 'testhelper'
|
7
9
|
|
8
10
|
class HTMLGenerator_Test < Test::Unit::TestCase
|
9
11
|
|
10
|
-
|
12
|
+
class << self
|
13
|
+
include TestHelper
|
14
|
+
end
|
15
|
+
|
16
|
+
test_files("html") do |input,result, name|
|
17
|
+
name =~ /([0-9]+)$/
|
18
|
+
define_method("test_input_#{$1}") do
|
19
|
+
assert_generates(result, input, nil, name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_http_urls_in_internal_links
|
24
|
+
html = generate('[[http://www.google.com]]', MediaWikiLinkHandler.new)
|
25
|
+
assert_equal html, '<p><a href="http://www.google.com">http://www.google.com</a></p>'
|
26
|
+
html = generate('[[https://www.google.com]]', MediaWikiLinkHandler.new)
|
27
|
+
assert_equal html, '<p><a href="https://www.google.com">https://www.google.com</a></p>'
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_punctuation_at_the_end_of_absolute_links
|
31
|
+
html = generate('http://example.com.', MediaWikiLinkHandler.new)
|
32
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>.</p>'
|
33
|
+
html = generate('http://example.com...', MediaWikiLinkHandler.new)
|
34
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>...</p>'
|
35
|
+
html = generate('http://example.com,', MediaWikiLinkHandler.new)
|
36
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>,</p>'
|
37
|
+
html = generate('http://example.com:', MediaWikiLinkHandler.new)
|
38
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>:</p>'
|
39
|
+
html = generate('http://example.com;', MediaWikiLinkHandler.new)
|
40
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>;</p>'
|
41
|
+
html = generate('http://example.com-', MediaWikiLinkHandler.new)
|
42
|
+
assert_equal html, '<p><a href="http://example.com">http://example.com</a>-</p>'
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_punctuation_at_the_end_of_internal_links
|
46
|
+
html = generate('[http://example.com/page. Example]', MediaWikiLinkHandler.new)
|
47
|
+
assert_equal html, '<p><a href="http://example.com/page.">Example</a></p>'
|
48
|
+
html = generate('[http://example.com/page- Example]', MediaWikiLinkHandler.new)
|
49
|
+
assert_equal html, '<p><a href="http://example.com/page-">Example</a></p>'
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_uses_element_attributes_from_link_handler
|
53
|
+
html = generate('[[InternalLink|This is just an internal link]]', ClassEmptyLinkHandler.new)
|
54
|
+
expected1 = '<p><a class="empty" href="http://www.example.com/wiki/InternalLink">This is just an internal link</a></p>'
|
55
|
+
expected2 = '<p><a href="http://www.example.com/wiki/InternalLink" class="empty">This is just an internal link</a></p>'
|
56
|
+
assert (html == expected1 or html == expected2)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_accepts_url_only_link_handlers
|
60
|
+
assert_generates '<p><a href="http://www.example.com/wiki/InternalLink/">This is just an internal link</a></p>',
|
61
|
+
'[[InternalLink|This is just an internal link]]',
|
62
|
+
UrlOnlyLinkHandler.new
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_prefers_url_from_attributes_when_provided_with_ambiguous_link_info
|
66
|
+
html = generate('[[InternalLink|This is just an internal link]]', AmbiguousLinkHandler.new)
|
67
|
+
expected1 = '<p><a rel="nofollow" href="http://www.example.com/wiki/InternalLink">This is just an internal link</a></p>'
|
68
|
+
expected2 = '<p><a href="http://www.example.com/wiki/InternalLink" rel="nofollow">This is just an internal link</a></p>'
|
69
|
+
assert (html == expected1 or html == expected2)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_allows_specification_of_all_attributes
|
73
|
+
html = generate('[[MyLink|Here is my link]]', LinkAttributeHandler.new)
|
74
|
+
expected1 = '<p><a href="http://www.mysite.com/MyLink" id="123">Here is my link</a></p>'
|
75
|
+
expected2 = '<p><a id="123" href="http://www.mysite.com/MyLink">Here is my link</a></p>'
|
76
|
+
assert (html == expected1 or html == expected2)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_allows_full_customization_of_link_tags
|
80
|
+
assert_generates '<p><span class="link">This doesn\'t even render into a real link</span></p>',
|
81
|
+
"[[AnotherLink|This doesn't even render into a real link]]",
|
82
|
+
FullLinkHandler.new
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_handles_category_links
|
86
|
+
assert_generates '<p><a class="category" href="http://www.mywiki.net/wiki/Category:Foo">More articles on Foo</a></p>',
|
87
|
+
"[[:Category:Foo|More articles on Foo]]",
|
88
|
+
CategoryLinkHandler.new
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_handles_category_directives
|
92
|
+
assert_generates '<p><div id="catlinks">This page belongs to the <a class="category" href="http://www.mywiki.net/wiki/Category:Foo">Foo category</a></div></p>',
|
93
|
+
"[[Category:Foo]]",
|
94
|
+
CategoryDirectiveHandler.new
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_table_with_column_attributes
|
98
|
+
assert_generates "<table cellpadding=\"5\" border=\"1\"><tr><td>a\n</td></tr>\n<tr><td colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"> b\n</td></tr>\n</table>\n",
|
99
|
+
"{|\n|a\n|-\n| colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"| b\n|}"
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_table_with_column_attributes_cellspacing_and_border
|
103
|
+
assert_generates "<table cellpadding=\"10\" border=\"5\"><tr><td>a\n</td></tr>\n<tr><td colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"> b\n</td></tr>\n</table>\n",
|
104
|
+
"{|cellpadding=\"10\" border=\"5\"\n|a\n|-\n| colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"| b\n|}"
|
105
|
+
end
|
11
106
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
parser = MediaWikiParser.new
|
16
|
-
parser.lexer = MediaWikiLexer.new
|
17
|
-
ast = parser.parse(input)
|
18
|
-
MediaWikiParams.instance.time = Time.utc(2000, 1, 1, 1, 1, 1, 1)
|
19
|
-
generator = MediaWikiHTMLGenerator.new
|
20
|
-
generator.parse(ast)
|
21
|
-
assert_equal generator.html, result, name
|
22
|
-
# puts generator.html
|
23
|
-
}
|
107
|
+
def test_table_with_column_attributes_cellspacing_and_border_and_style
|
108
|
+
assert_generates "<table cellspacing=\"0\" cellpadding=\"5\" style=\"border-collapse:collapse\"><tr><td>a\n</td></tr>\n<tr><td colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"> b\n</td></tr>\n</table>\n",
|
109
|
+
"{|cellspacing=\"0\" cellpadding=\"5\" style=\"border-collapse:collapse\"\n|a\n|-\n| colspan=\"4\" align=\"center\" style=\"background:#ffdead;\"| b\n|}"
|
24
110
|
end
|
25
111
|
|
112
|
+
def test_table_without_column_attributes
|
113
|
+
assert_generates "<table cellpadding=\"5\" border=\"1\"><tr><td> a\n</td><td> b\n</td></tr>\n</table>\n",
|
114
|
+
"{|\n| a\n| b\n|}"
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def assert_generates(result, input, link_handler=nil, message=nil)
|
120
|
+
assert_equal(result, generate(input, link_handler), message)
|
121
|
+
end
|
122
|
+
|
123
|
+
def generate(input, link_handler = nil)
|
124
|
+
parser = MediaWikiParser.new
|
125
|
+
parser.lexer = MediaWikiLexer.new
|
126
|
+
ast = parser.parse(input)
|
127
|
+
generator = MediaWikiHTMLGenerator.new
|
128
|
+
generator.link_handler = link_handler if link_handler
|
129
|
+
params = MediaWikiParams.new
|
130
|
+
params.time = Time.utc(2000, 1, 1, 1, 1, 1, 1)
|
131
|
+
generator.params = params
|
132
|
+
generator.parse(ast)
|
133
|
+
generator.html
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class LinkAttributeHandler < MediaWikiLinkHandler
|
138
|
+
def link_attributes_for(page)
|
139
|
+
{ :href => "http://www.mysite.com/#{page}", :id => '123' }
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class ClassEmptyLinkHandler < MediaWikiLinkHandler
|
144
|
+
def link_attributes_for(resource)
|
145
|
+
{:class => 'empty', :href => "http://www.example.com/wiki/#{resource}"}
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
class UrlOnlyLinkHandler < MediaWikiLinkHandler
|
150
|
+
def url_for(resource)
|
151
|
+
"http://www.example.com/wiki/#{resource}/"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
class AmbiguousLinkHandler < MediaWikiLinkHandler
|
156
|
+
def url_for(resource)
|
157
|
+
"http://www.somewhereelse.net"
|
158
|
+
end
|
159
|
+
|
160
|
+
def link_attributes_for(resource)
|
161
|
+
{:rel => 'nofollow', :href => "http://www.example.com/wiki/#{resource}"}
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
class FullLinkHandler < MediaWikiLinkHandler
|
166
|
+
def link_for(page, text)
|
167
|
+
"<span class=\"link\">#{text}</span>"
|
168
|
+
end
|
26
169
|
end
|
170
|
+
|
171
|
+
class CategoryLinkHandler
|
172
|
+
def link_for_category(locator, text)
|
173
|
+
%(<a class="category" href="http://www.mywiki.net/wiki/Category:#{locator}">#{text}</a>)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class CategoryDirectiveHandler
|
178
|
+
def category_add(name, sort)
|
179
|
+
%(<div id="catlinks">This page belongs to the <a class="category" href="http://www.mywiki.net/wiki/Category:#{name}">#{name} category</a></div>)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
|