mediacloth 0.0.2 → 0.0.3
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/lib/mediacloth/mediawikiast.rb +42 -0
- data/lib/mediacloth/mediawikihtmlgenerator.rb +100 -29
- data/lib/mediacloth/mediawikilexer.rb +292 -37
- data/lib/mediacloth/mediawikilexer.rb~ +491 -0
- data/lib/mediacloth/mediawikiparser.rb +535 -173
- data/lib/mediacloth/mediawikiparser.y +183 -15
- data/lib/mediacloth/mediawikiparser.y~ +210 -0
- data/lib/mediacloth/mediawikiwalker.rb +56 -8
- data/test/data/html1 +1 -1
- data/test/data/html10 +98 -0
- data/test/data/html3 +1 -1
- data/test/data/html4 +11 -1
- data/test/data/html5 +5 -1
- data/test/data/html7 +1 -2
- data/test/data/html8 +1 -1
- data/test/data/html9 +6 -0
- data/test/data/input1 +5 -0
- data/test/data/input10 +124 -0
- data/test/data/input4 +50 -1
- data/test/data/input5 +8 -0
- data/test/data/input7 +35 -2
- data/test/data/input9 +14 -0
- data/test/data/lex1 +5 -1
- data/test/data/lex10 +87 -0
- data/test/data/lex4 +47 -1
- data/test/data/lex5 +7 -1
- data/test/data/lex7 +35 -2
- data/test/data/lex9 +14 -0
- data/test/dataproducers/html.rb +2 -2
- data/test/dataproducers/html.rb~ +24 -0
- data/test/dataproducers/lex.rb +3 -3
- data/test/dataproducers/lex.rb~ +15 -0
- data/test/debugwalker.rb +1 -1
- data/test/htmlgenerator.rb +5 -4
- data/test/lexer.rb +40 -3
- data/test/parser.rb +0 -1
- metadata +14 -3
data/test/data/html9
ADDED
data/test/data/input1
CHANGED
@@ -19,6 +19,11 @@ We can have headlines:
|
|
19
19
|
====== Headline6 ======
|
20
20
|
======= Headline7 =======
|
21
21
|
|
22
|
+
Headlines may have formatting:
|
23
|
+
|
24
|
+
= See [[Internal Link]] for more info =
|
25
|
+
== This is an '''important''' heading ==
|
26
|
+
|
22
27
|
This is a preformatted ''' ''' << '' '' text
|
23
28
|
yes
|
24
29
|
|
data/test/data/input10
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
Some examples of tables.
|
2
|
+
|
3
|
+
{|
|
4
|
+
|}
|
5
|
+
|
6
|
+
{|
|
7
|
+
|-
|
8
|
+
|}
|
9
|
+
|
10
|
+
{|
|
11
|
+
| a
|
12
|
+
| b
|
13
|
+
|}
|
14
|
+
|
15
|
+
{|
|
16
|
+
| a
|
17
|
+
| b
|
18
|
+
|-
|
19
|
+
| 1
|
20
|
+
| 2
|
21
|
+
|}
|
22
|
+
|
23
|
+
{|
|
24
|
+
| a || b
|
25
|
+
|-
|
26
|
+
| 1 || 2
|
27
|
+
|}
|
28
|
+
|
29
|
+
{|
|
30
|
+
! a
|
31
|
+
! b
|
32
|
+
|-
|
33
|
+
| 1
|
34
|
+
| 2
|
35
|
+
|}
|
36
|
+
|
37
|
+
{|
|
38
|
+
! a || b
|
39
|
+
|-
|
40
|
+
| 1 || 2
|
41
|
+
|}
|
42
|
+
|
43
|
+
{|
|
44
|
+
| a
|
45
|
+
|-
|
46
|
+
| 1
|
47
|
+
| 2
|
48
|
+
|}
|
49
|
+
|
50
|
+
{|
|
51
|
+
| a
|
52
|
+
| b
|
53
|
+
|-
|
54
|
+
| 1
|
55
|
+
|}
|
56
|
+
|
57
|
+
{|
|
58
|
+
| a
|
59
|
+
| b
|
60
|
+
|-
|
61
|
+
|
|
62
|
+
| 2
|
63
|
+
|}
|
64
|
+
|
65
|
+
{|
|
66
|
+
| [http://example.com Example]
|
67
|
+
| '''bold'''
|
68
|
+
|-
|
69
|
+
| [[example|Example]]
|
70
|
+
| [[image:example.jpg|1|2|3]]
|
71
|
+
|}
|
72
|
+
|
73
|
+
{|
|
74
|
+
| [http://example.com Example
|
75
|
+
| '''bold
|
76
|
+
|-
|
77
|
+
| [[example|Example
|
78
|
+
| '''bold ''italic
|
79
|
+
|}
|
80
|
+
|
81
|
+
{|
|
82
|
+
| a
|
83
|
+
| b
|
84
|
+
|-
|
85
|
+
| A list in a cell:
|
86
|
+
* one
|
87
|
+
* two
|
88
|
+
|}
|
89
|
+
|
90
|
+
{|
|
91
|
+
| a
|
92
|
+
| b
|
93
|
+
|-
|
94
|
+
| A table in a cell:
|
95
|
+
{|
|
96
|
+
| 1
|
97
|
+
| 2
|
98
|
+
|-
|
99
|
+
| one
|
100
|
+
| two
|
101
|
+
|}
|
102
|
+
|}
|
103
|
+
|
104
|
+
|
105
|
+
{| border="1"
|
106
|
+
! a
|
107
|
+
! b
|
108
|
+
|- align="left"
|
109
|
+
| 1
|
110
|
+
| 2
|
111
|
+
|}
|
112
|
+
|
113
|
+
|
114
|
+
Text before
|
115
|
+
{|
|
116
|
+
| a
|
117
|
+
| b
|
118
|
+
|}
|
119
|
+
|
120
|
+
Text before with ''italic
|
121
|
+
{|
|
122
|
+
| a
|
123
|
+
| b
|
124
|
+
|}
|
data/test/data/input4
CHANGED
@@ -1 +1,50 @@
|
|
1
|
-
|
1
|
+
Test mixing of bold and italic formatting:
|
2
|
+
|
3
|
+
''italic'''bold'''italic''
|
4
|
+
|
5
|
+
'''bold''italic''bold'''
|
6
|
+
|
7
|
+
'''''boldalic'''''
|
8
|
+
|
9
|
+
''italic'''bold'''italic'''''bold''italic''bold'''
|
10
|
+
|
11
|
+
|
12
|
+
Test bold and italic wrapped around inline links:
|
13
|
+
|
14
|
+
''http://example.com''
|
15
|
+
|
16
|
+
'''http://example.com'''
|
17
|
+
|
18
|
+
''http://example.com'''
|
19
|
+
|
20
|
+
'''http://example.com' is good'''
|
21
|
+
|
22
|
+
''http://example.com' is good''
|
23
|
+
|
24
|
+
|
25
|
+
Test unclosed bold and italic formatting:
|
26
|
+
|
27
|
+
''Some italic and now ''bold
|
28
|
+
==Heading==
|
29
|
+
Text
|
30
|
+
|
31
|
+
|
32
|
+
''Some italic and now '''bold
|
33
|
+
==Heading==
|
34
|
+
Text
|
35
|
+
|
36
|
+
|
37
|
+
''Some italic and now '''bold
|
38
|
+
|
39
|
+
==Heading==
|
40
|
+
Text
|
41
|
+
|
42
|
+
|
43
|
+
''Some italic and now '''bold
|
44
|
+
* one
|
45
|
+
* two
|
46
|
+
|
47
|
+
|
48
|
+
''Some italic and now '''bold
|
49
|
+
|
50
|
+
Text
|
data/test/data/input5
CHANGED
data/test/data/input7
CHANGED
@@ -1,2 +1,35 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
http://sun.com
|
2
|
+
|
3
|
+
[http://sun.com]
|
4
|
+
|
5
|
+
[mailto:joe@sun.com]
|
6
|
+
|
7
|
+
[http://sun.com stars]
|
8
|
+
|
9
|
+
[http://sun.com stars and moon]
|
10
|
+
|
11
|
+
[http://sun.com stars and ''moon'' and '''trees''' and birds]
|
12
|
+
|
13
|
+
[[sun]]
|
14
|
+
|
15
|
+
[[sun|All about Sun]]
|
16
|
+
|
17
|
+
[[image:sun|All about Sun]]
|
18
|
+
|
19
|
+
[[sun|nofollow|All about Sun]]
|
20
|
+
|
21
|
+
[[image:sun|nofollow|All about Sun]]
|
22
|
+
|
23
|
+
[[image:sun|All about [[Sun]]]]
|
24
|
+
|
25
|
+
[[image:sun|All about [[sun|More about]]]]
|
26
|
+
|
27
|
+
[[image:sun|one||two||three|]]
|
28
|
+
|
29
|
+
[]
|
30
|
+
|
31
|
+
[ ]
|
32
|
+
|
33
|
+
[[]]
|
34
|
+
|
35
|
+
[[ ]]
|
data/test/data/input9
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Some examples of wiki escaping.
|
2
|
+
|
3
|
+
A paragraph with some wiki characters: <nowiki>''italic'' '''bold''' [[Link]]</nowiki>
|
4
|
+
|
5
|
+
An escaped list:
|
6
|
+
<nowiki>
|
7
|
+
* one
|
8
|
+
* two
|
9
|
+
* three
|
10
|
+
</nowiki>
|
11
|
+
|
12
|
+
Text escaped in a heading:
|
13
|
+
|
14
|
+
==Heading with <nowiki>'''</nowiki>==
|
data/test/data/lex1
CHANGED
@@ -6,12 +6,16 @@ PARA_STARTTEXTAnother paragraph starts after a blank line.PARA_END
|
|
6
6
|
PARA_STARTTEXT
|
7
7
|
Another one.PARA_END
|
8
8
|
|
9
|
-
PARA_STARTTEXTThis is text with INTLINKSTART[[TEXTInternal LinkINTLINKEND]]TEXT and LINKSTART[TEXThttp://www.example.
|
9
|
+
PARA_STARTTEXTThis is text with INTLINKSTART[[TEXTInternal LinkINTLINKEND]]TEXT and LINKSTART[TEXThttp://www.example.comLINKSEPTEXTexternal linkLINKEND]TEXT.PARA_END
|
10
10
|
|
11
11
|
PARA_STARTTEXTWe can have headlines:PARA_END
|
12
12
|
|
13
13
|
SECTION_START=TEXT Headline1 SECTION_END=SECTION_START==TEXT Headline2 SECTION_END==SECTION_START===TEXT Headline3 SECTION_END===SECTION_START====TEXT Headline4 SECTION_END====SECTION_START=====TEXT Headline5 SECTION_END=====SECTION_START======TEXT Headline6 SECTION_END======SECTION_START=======TEXT Headline7 SECTION_END=======PARA_STARTPARA_END
|
14
14
|
|
15
|
+
PARA_STARTTEXTHeadlines may have formatting:PARA_END
|
16
|
+
|
17
|
+
SECTION_START=TEXT See INTLINKSTART[[TEXTInternal LinkINTLINKEND]]TEXT for more info SECTION_END=SECTION_START==TEXT This is an BOLDSTART'''TEXTimportantBOLDEND'''TEXT heading SECTION_END==PARA_STARTPARA_END
|
18
|
+
|
15
19
|
PREThis is a preformatted ''' ''' << '' '' text
|
16
20
|
PREyes
|
17
21
|
HLINE----PARA_STARTTEXT
|
data/test/data/lex10
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
PARA_STARTTEXTSome examples of tables.PARA_END
|
2
|
+
|
3
|
+
TABLE_START{|TABLE_END|}PARA_STARTPARA_END
|
4
|
+
|
5
|
+
TABLE_START{|ROW_START|-ROW_END|}TABLE_ENDPARA_STARTPARA_END
|
6
|
+
|
7
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
8
|
+
CELL_END|CELL_STARTTEXT b
|
9
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
10
|
+
|
11
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
12
|
+
CELL_END|CELL_STARTTEXT b
|
13
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT 1
|
14
|
+
CELL_END|CELL_STARTTEXT 2
|
15
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
16
|
+
|
17
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a CELL_END||CELL_STARTTEXT b
|
18
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT 1 CELL_END||CELL_STARTTEXT 2
|
19
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
20
|
+
|
21
|
+
TABLE_START{|ROW_START!HEAD_STARTTEXT a
|
22
|
+
HEAD_END!HEAD_STARTTEXT b
|
23
|
+
HEAD_END|-ROW_ENDROW_STARTCELL_START|TEXT 1
|
24
|
+
CELL_END|CELL_STARTTEXT 2
|
25
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
26
|
+
|
27
|
+
TABLE_START{|ROW_START!HEAD_STARTTEXT a HEAD_END||HEAD_STARTTEXT b
|
28
|
+
HEAD_END|-ROW_ENDROW_STARTCELL_START|TEXT 1 CELL_END||CELL_STARTTEXT 2
|
29
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
30
|
+
|
31
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
32
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT 1
|
33
|
+
CELL_END|CELL_STARTTEXT 2
|
34
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
35
|
+
|
36
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
37
|
+
CELL_END|CELL_STARTTEXT b
|
38
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT 1
|
39
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
40
|
+
|
41
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
42
|
+
CELL_END|CELL_STARTTEXT b
|
43
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|CELL_END|CELL_STARTTEXT 2
|
44
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
45
|
+
|
46
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT LINKSTART[TEXThttp://example.comLINKSEPTEXTExampleLINKEND]CELL_END|CELL_STARTTEXT BOLDSTART'''TEXTboldBOLDEND'''CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT INTLINKSTART[[TEXTexampleINTLINKSEP|TEXTExampleINTLINKEND]]CELL_END|CELL_STARTTEXT INTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTexample.jpgINTLINKSEP|TEXT1INTLINKSEP|TEXT2INTLINKSEP|TEXT3INTLINKEND]]CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
47
|
+
|
48
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT LINKSTART[TEXThttp://example.comLINKSEPTEXTExample
|
49
|
+
LINKEND|CELL_ENDCELL_STARTTEXT BOLDSTART'''TEXTbold
|
50
|
+
BOLDEND|-CELL_ENDROW_ENDROW_STARTCELL_START|TEXT INTLINKSTART[[TEXTexampleINTLINKSEP|TEXTExample
|
51
|
+
INTLINKEND|CELL_ENDCELL_STARTTEXT BOLDSTART'''TEXTbold ITALICSTART''TEXTitalic
|
52
|
+
ITALICEND|}BOLDENDCELL_ENDROW_ENDTABLE_ENDPARA_STARTPARA_END
|
53
|
+
|
54
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
55
|
+
CELL_END|CELL_STARTTEXT b
|
56
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT A list in a cell:
|
57
|
+
UL_STARTLI_STARTTEXTone
|
58
|
+
LI_ENDLI_STARTTEXTtwo
|
59
|
+
LI_ENDUL_ENDCELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
60
|
+
|
61
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT a
|
62
|
+
CELL_END|CELL_STARTTEXT b
|
63
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT A table in a cell:
|
64
|
+
TABLE_START{|ROW_START|CELL_STARTTEXT 1
|
65
|
+
CELL_END|CELL_STARTTEXT 2
|
66
|
+
CELL_END|-ROW_ENDROW_STARTCELL_START|TEXT one
|
67
|
+
CELL_END|CELL_STARTTEXT two
|
68
|
+
CELL_END|}ROW_ENDTABLE_ENDCELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
69
|
+
|
70
|
+
TABLE_START{|TEXT border="1"
|
71
|
+
ROW_START!HEAD_STARTTEXT a
|
72
|
+
HEAD_END!HEAD_STARTTEXT b
|
73
|
+
HEAD_END|-ROW_ENDROW_STARTTEXT align="left"
|
74
|
+
CELL_START|TEXT 1
|
75
|
+
CELL_END|CELL_STARTTEXT 2
|
76
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
77
|
+
|
78
|
+
PARA_STARTTEXT
|
79
|
+
Text before
|
80
|
+
PARA_END{|TABLE_STARTROW_START|CELL_STARTTEXT a
|
81
|
+
CELL_END|CELL_STARTTEXT b
|
82
|
+
CELL_END|}ROW_ENDTABLE_ENDPARA_STARTPARA_END
|
83
|
+
|
84
|
+
PARA_STARTTEXTText before with ITALICSTART''TEXTitalic
|
85
|
+
ITALICEND{|PARA_ENDTABLE_STARTROW_START|CELL_STARTTEXT a
|
86
|
+
CELL_END|CELL_STARTTEXT b
|
87
|
+
CELL_END|}ROW_ENDTABLE_ENDfalsefalse
|
data/test/data/lex4
CHANGED
@@ -1 +1,47 @@
|
|
1
|
-
|
1
|
+
PARA_STARTTEXTTest mixing of bold and italic formatting:PARA_END
|
2
|
+
|
3
|
+
PARA_STARTITALICSTART''TEXTitalicBOLDSTART'''TEXTboldBOLDEND'''TEXTitalicITALICEND''PARA_END
|
4
|
+
|
5
|
+
PARA_STARTBOLDSTART'''TEXTboldITALICSTART''TEXTitalicITALICEND''TEXTboldBOLDEND'''PARA_END
|
6
|
+
|
7
|
+
PARA_STARTITALICSTART''BOLDSTART'''TEXTboldalicBOLDEND'''ITALICEND''PARA_END
|
8
|
+
|
9
|
+
PARA_STARTITALICSTART''TEXTitalicBOLDSTART'''TEXTboldBOLDEND'''TEXTitalicITALICEND''BOLDSTART'''TEXTboldITALICSTART''TEXTitalicITALICEND''TEXTboldBOLDEND'''PARA_END
|
10
|
+
|
11
|
+
PARA_STARTTEXT
|
12
|
+
Test bold and italic wrapped around inline links:PARA_END
|
13
|
+
|
14
|
+
PARA_STARTITALICSTART''LINKSTARTTEXThttp://example.comLINKEND]ITALICEND''PARA_END
|
15
|
+
|
16
|
+
PARA_STARTBOLDSTART'''LINKSTARTTEXThttp://example.comLINKEND]BOLDEND'''PARA_END
|
17
|
+
|
18
|
+
PARA_STARTITALICSTART''LINKSTARTTEXThttp://example.com'LINKEND]ITALICEND''PARA_END
|
19
|
+
|
20
|
+
PARA_STARTBOLDSTART'''LINKSTARTTEXThttp://example.com'LINKEND]TEXT is goodBOLDEND'''PARA_END
|
21
|
+
|
22
|
+
PARA_STARTITALICSTART''LINKSTARTTEXThttp://example.com'LINKEND]TEXT is goodITALICEND''PARA_END
|
23
|
+
|
24
|
+
PARA_STARTTEXT
|
25
|
+
Test unclosed bold and italic formatting:PARA_END
|
26
|
+
|
27
|
+
PARA_STARTITALICSTART''TEXTSome italic and now ITALICEND''TEXTbold
|
28
|
+
PARA_ENDSECTION_START==TEXTHeadingSECTION_END==PARA_STARTTEXT
|
29
|
+
TextPARA_END
|
30
|
+
|
31
|
+
PARA_STARTITALICSTART''TEXTSome italic and now BOLDSTART'''TEXTbold
|
32
|
+
BOLDENDITALICENDPARA_ENDSECTION_START==TEXTHeadingSECTION_END==PARA_STARTTEXT
|
33
|
+
TextPARA_END
|
34
|
+
|
35
|
+
PARA_STARTITALICSTART''TEXTSome italic and now BOLDSTART'''TEXTboldBOLDEND
|
36
|
+
|
37
|
+
ITALICENDPARA_ENDSECTION_START==TEXTHeadingSECTION_END==PARA_STARTTEXT
|
38
|
+
TextPARA_END
|
39
|
+
|
40
|
+
PARA_STARTITALICSTART''TEXTSome italic and now BOLDSTART'''TEXTbold
|
41
|
+
BOLDENDITALICENDPARA_ENDUL_STARTLI_STARTTEXTone
|
42
|
+
LI_ENDLI_STARTTEXTtwo
|
43
|
+
LI_ENDUL_ENDPARA_STARTPARA_END
|
44
|
+
|
45
|
+
PARA_STARTITALICSTART''TEXTSome italic and now BOLDSTART'''TEXTboldBOLDEND
|
46
|
+
|
47
|
+
ITALICENDPARA_ENDPARA_STARTTEXTTextPARA_ENDfalsefalse
|
data/test/data/lex5
CHANGED
@@ -9,4 +9,10 @@ LI_ENDUL_ENDLI_ENDUL_ENDOL_STARTLI_STARTTEXTa
|
|
9
9
|
OL_STARTLI_STARTTEXTa
|
10
10
|
OL_STARTLI_STARTTEXTa
|
11
11
|
OL_STARTLI_STARTTEXTa
|
12
|
-
|
12
|
+
LI_ENDOL_ENDLI_ENDOL_ENDLI_ENDOL_ENDLI_ENDLI_STARTTEXTa
|
13
|
+
OL_STARTLI_STARTTEXTaa
|
14
|
+
LI_ENDOL_ENDLI_ENDOL_ENDUL_STARTLI_STARTTEXTA
|
15
|
+
LI_ENDLI_STARTTEXTB
|
16
|
+
LI_ENDLI_STARTLI_ENDUL_ENDOL_STARTLI_STARTTEXTA
|
17
|
+
LI_ENDLI_STARTTEXTB
|
18
|
+
LI_ENDLI_STARTLI_ENDOL_ENDfalsefalse
|
data/test/data/lex7
CHANGED
@@ -1,2 +1,35 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
PARA_STARTLINKSTARTTEXThttp://sun.comLINKEND]PARA_END
|
2
|
+
|
3
|
+
PARA_STARTLINKSTART[TEXThttp://sun.comLINKEND]PARA_END
|
4
|
+
|
5
|
+
PARA_STARTLINKSTART[TEXTmailto:joe@sun.comLINKEND]PARA_END
|
6
|
+
|
7
|
+
PARA_STARTLINKSTART[TEXThttp://sun.comLINKSEPTEXTstarsLINKEND]PARA_END
|
8
|
+
|
9
|
+
PARA_STARTLINKSTART[TEXThttp://sun.comLINKSEPTEXTstars and moonLINKEND]PARA_END
|
10
|
+
|
11
|
+
PARA_STARTLINKSTART[TEXThttp://sun.comLINKSEPTEXTstars and ITALICSTART''TEXTmoonITALICEND''LINKSEPTEXTand BOLDSTART'''TEXTtreesBOLDEND'''LINKSEPTEXTand birdsLINKEND]PARA_END
|
12
|
+
|
13
|
+
PARA_STARTINTLINKSTART[[TEXTsunINTLINKEND]]PARA_END
|
14
|
+
|
15
|
+
PARA_STARTINTLINKSTART[[TEXTsunINTLINKSEP|TEXTAll about SunINTLINKEND]]PARA_END
|
16
|
+
|
17
|
+
PARA_STARTINTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTsunINTLINKSEP|TEXTAll about SunINTLINKEND]]PARA_END
|
18
|
+
|
19
|
+
PARA_STARTINTLINKSTART[[TEXTsunINTLINKSEP|TEXTnofollow|All about SunINTLINKEND]]PARA_END
|
20
|
+
|
21
|
+
PARA_STARTINTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTsunINTLINKSEP|TEXTnofollowINTLINKSEP|TEXTAll about SunINTLINKEND]]PARA_END
|
22
|
+
|
23
|
+
PARA_STARTINTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTsunINTLINKSEP|TEXTAll about INTLINKSTART[[TEXTSunINTLINKEND]]INTLINKEND]]PARA_END
|
24
|
+
|
25
|
+
PARA_STARTINTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTsunINTLINKSEP|TEXTAll about INTLINKSTART[[TEXTsunINTLINKSEP|TEXTMore aboutINTLINKEND]]INTLINKEND]]PARA_END
|
26
|
+
|
27
|
+
PARA_STARTINTLINKSTART[[TEXTimageRESOURCE_SEP:TEXTsunINTLINKSEP|TEXToneINTLINKSEP|INTLINKSEP|TEXTtwoINTLINKSEP|INTLINKSEP|TEXTthreeINTLINKSEP|INTLINKEND]]PARA_END
|
28
|
+
|
29
|
+
PARA_STARTTEXT[]PARA_END
|
30
|
+
|
31
|
+
PARA_STARTTEXT[ ]PARA_END
|
32
|
+
|
33
|
+
PARA_STARTTEXT[[]]PARA_END
|
34
|
+
|
35
|
+
PARA_STARTTEXT[[ ]]PARA_ENDfalsefalse
|
data/test/data/lex9
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
PARA_STARTTEXTSome examples of wiki escaping.PARA_END
|
2
|
+
|
3
|
+
PARA_STARTTEXTA paragraph with some wiki characters: ''italic'' '''bold''' [[Link]]PARA_END
|
4
|
+
|
5
|
+
PARA_STARTTEXTAn escaped list:
|
6
|
+
|
7
|
+
* one
|
8
|
+
* two
|
9
|
+
* three
|
10
|
+
PARA_END
|
11
|
+
|
12
|
+
PARA_STARTTEXTText escaped in a heading:PARA_END
|
13
|
+
|
14
|
+
SECTION_START==TEXTHeading with '''SECTION_END==falsefalse
|
data/test/dataproducers/html.rb
CHANGED
@@ -4,8 +4,8 @@ require 'mediacloth/mediawikiparams'
|
|
4
4
|
require 'mediacloth/mediawikihtmlgenerator'
|
5
5
|
|
6
6
|
def produce(index)
|
7
|
-
file = File.new("../data/html#{index}", "w")
|
8
|
-
inputFile = File.new("../data/input#{index}", "r")
|
7
|
+
file = File.new("../test/data/html#{index}", "w")
|
8
|
+
inputFile = File.new("../test/data/input#{index}", "r")
|
9
9
|
input = inputFile.read
|
10
10
|
|
11
11
|
parser = MediaWikiParser.new
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mediacloth/mediawikilexer'
|
2
|
+
require 'mediacloth/mediawikiparser'
|
3
|
+
require 'mediacloth/mediawikiparams'
|
4
|
+
require 'mediacloth/mediawikihtmlgenerator'
|
5
|
+
|
6
|
+
def produce(index)
|
7
|
+
file = File.new("../data/html#{index}", "w")
|
8
|
+
inputFile = File.new("../data/input#{index}", "r")
|
9
|
+
input = inputFile.read
|
10
|
+
|
11
|
+
parser = MediaWikiParser.new
|
12
|
+
parser.lexer = MediaWikiLexer.new
|
13
|
+
ast = parser.parse(input)
|
14
|
+
MediaWikiParams.instance.time = Time.mktime(2000, 1, 1, 1, 1, 1, 1)
|
15
|
+
generator = MediaWikiHTMLGenerator.new
|
16
|
+
generator.parse(ast)
|
17
|
+
|
18
|
+
# puts generator.html
|
19
|
+
file.write(generator.html)
|
20
|
+
file.close
|
21
|
+
end
|
22
|
+
|
23
|
+
# (3..5).each { |i| produce(i) }
|
24
|
+
produce(5)
|
data/test/dataproducers/lex.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'mediacloth/mediawikilexer'
|
2
2
|
|
3
3
|
def produce(index)
|
4
|
-
file = File.new("../data/lex#{index}", "w")
|
5
|
-
inputFile = File.new("../data/input#{index}", "r")
|
4
|
+
file = File.new("../test/data/lex#{index}", "w")
|
5
|
+
inputFile = File.new("../test/data/input#{index}", "r")
|
6
6
|
input = inputFile.read
|
7
7
|
|
8
8
|
lexer = MediaWikiLexer.new
|
@@ -12,4 +12,4 @@ def produce(index)
|
|
12
12
|
end
|
13
13
|
|
14
14
|
#1..5.each { |i| produce(1) }
|
15
|
-
produce(
|
15
|
+
produce(5)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'mediacloth/mediawikilexer'
|
2
|
+
|
3
|
+
def produce(index)
|
4
|
+
file = File.new("../data/lex#{index}", "w")
|
5
|
+
inputFile = File.new("../data/input#{index}", "r")
|
6
|
+
input = inputFile.read
|
7
|
+
|
8
|
+
lexer = MediaWikiLexer.new
|
9
|
+
tokens = lexer.tokenize(input)
|
10
|
+
file.write(tokens.to_s)
|
11
|
+
file.close
|
12
|
+
end
|
13
|
+
|
14
|
+
#1..5.each { |i| produce(1) }
|
15
|
+
produce(8)
|
data/test/debugwalker.rb
CHANGED
data/test/htmlgenerator.rb
CHANGED
@@ -5,19 +5,20 @@ require 'mediacloth/mediawikihtmlgenerator'
|
|
5
5
|
require 'test/unit'
|
6
6
|
require 'testhelper'
|
7
7
|
|
8
|
-
class
|
8
|
+
class HTMLGenerator_Test < Test::Unit::TestCase
|
9
9
|
|
10
10
|
include TestHelper
|
11
11
|
|
12
12
|
def test_input
|
13
|
-
test_files("html") { |input,result|
|
13
|
+
test_files("html") { |input,result,name|
|
14
|
+
puts name
|
14
15
|
parser = MediaWikiParser.new
|
15
16
|
parser.lexer = MediaWikiLexer.new
|
16
17
|
ast = parser.parse(input)
|
17
|
-
MediaWikiParams.instance.time = Time.
|
18
|
+
MediaWikiParams.instance.time = Time.utc(2000, 1, 1, 1, 1, 1, 1)
|
18
19
|
generator = MediaWikiHTMLGenerator.new
|
19
20
|
generator.parse(ast)
|
20
|
-
assert_equal generator.html, result
|
21
|
+
assert_equal generator.html, result, name
|
21
22
|
# puts generator.html
|
22
23
|
}
|
23
24
|
end
|
data/test/lexer.rb
CHANGED
@@ -6,18 +6,35 @@ class Lexer_Test < Test::Unit::TestCase
|
|
6
6
|
|
7
7
|
include TestHelper
|
8
8
|
|
9
|
-
def
|
9
|
+
def test_standard_formatted_input
|
10
10
|
test_files("lex") { |input,result,resultname|
|
11
11
|
lexer = MediaWikiLexer.new
|
12
12
|
tokens = lexer.tokenize(input)
|
13
|
-
assert_equal(tokens.to_s,
|
13
|
+
assert_equal(result, tokens.to_s, "Mismatch in #{resultname}")
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_internet_formatted_input
|
18
|
+
test_files("lex") { |input,result,resultname|
|
19
|
+
lexer = MediaWikiLexer.new
|
20
|
+
tokens = lexer.tokenize(input.gsub("\n", "\r\n"))
|
21
|
+
assert_equal(result.gsub("\n", "\r\n"), tokens.to_s, "Mismatch in #{resultname}")
|
14
22
|
}
|
15
23
|
end
|
16
24
|
|
17
25
|
def test_paragraphs
|
18
|
-
assert_equal(lex("
|
26
|
+
assert_equal(lex("text\n\ntext"),
|
27
|
+
[[:PARA_START, ""], [:TEXT, "text"], [:PARA_END, "\n\n"],
|
28
|
+
[:PARA_START, ""], [:TEXT, "text"], [:PARA_END, ""], [false,false]])
|
29
|
+
assert_equal(lex("text\r\n\r\ntext"),
|
30
|
+
[[:PARA_START, ""], [:TEXT, "text"], [:PARA_END, "\r\n\r\n"],
|
31
|
+
[:PARA_START, ""], [:TEXT, "text"], [:PARA_END, ""], [false,false]])
|
32
|
+
assert_equal(lex("Before\n\n=Headline="),
|
19
33
|
[[:PARA_START, ""], [:TEXT, "Before"], [:PARA_END, "\n\n"],
|
20
34
|
[:SECTION_START, "="], [:TEXT, "Headline"], [:SECTION_END, "="], [false,false]])
|
35
|
+
assert_equal(lex("Before\r\n\r\n=Headline="),
|
36
|
+
[[:PARA_START, ""], [:TEXT, "Before"], [:PARA_END, "\r\n\r\n"],
|
37
|
+
[:SECTION_START, "="], [:TEXT, "Headline"], [:SECTION_END, "="], [false,false]])
|
21
38
|
end
|
22
39
|
|
23
40
|
def test_empty
|
@@ -27,6 +44,7 @@ class Lexer_Test < Test::Unit::TestCase
|
|
27
44
|
def test_preformatted
|
28
45
|
#assure preformatted text works as expected at the start of the text
|
29
46
|
assert_equal(lex(" Foo\n"), [[:PRE, "Foo\n"], [false, false]])
|
47
|
+
assert_equal(lex(" Foo\r\n"), [[:PRE, "Foo\r\n"], [false, false]])
|
30
48
|
assert_equal(lex(" Foo"), [[:PRE, "Foo"], [false, false]])
|
31
49
|
end
|
32
50
|
|
@@ -34,16 +52,30 @@ class Lexer_Test < Test::Unit::TestCase
|
|
34
52
|
#assure that at the start of the text hline still works
|
35
53
|
assert_equal(lex("----"), [[:HLINE, "----"], [false, false]])
|
36
54
|
assert_equal(lex("\n----"), [[:HLINE, "----"], [false, false]])
|
55
|
+
assert_equal(lex("\r\n----"), [[:HLINE, "----"], [false, false]])
|
37
56
|
end
|
57
|
+
|
58
|
+
def test_inline_links
|
59
|
+
#assure that links in-line work
|
60
|
+
assert_equal(lex("http://example.com"), [[:PARA_START, ""], [:LINKSTART, ""], [:TEXT, "http://example.com"], [:LINKEND, "]"], [:PARA_END, ""], [false, false]])
|
61
|
+
assert_equal(lex("http://example.com\n"), [[:PARA_START, ""], [:LINKSTART, ""], [:TEXT, "http://example.com"], [:LINKEND, "]"], [:PARA_END, ""], [false, false]])
|
62
|
+
#assert_equal(lex("http://example.com''italic''"), [[:PARA_START, ""], [:LINKSTART, ""], [:TEXT, "http://example.com"], [:LINKEND, "]"], [:PARA_END, ""], [false, false]])
|
63
|
+
end
|
38
64
|
|
39
65
|
def test_ending_text_token
|
40
66
|
#check for a problem when the last token is TEXT and it's not included
|
41
67
|
assert_equal(lex("\n----\nfoo\n"),
|
42
68
|
[[:HLINE, "----"], [:PARA_START, ""],
|
43
69
|
[:TEXT, "\nfoo\n"], [:PARA_END, ""], [false, false]])
|
70
|
+
assert_equal(lex("\r\n----\r\nfoo\r\n"),
|
71
|
+
[[:HLINE, "----"], [:PARA_START, ""],
|
72
|
+
[:TEXT, "\r\nfoo\r\n"], [:PARA_END, ""], [false, false]])
|
44
73
|
assert_equal(lex("\n----\nfoo\n Hehe"),
|
45
74
|
[[:HLINE, "----"], [:PARA_START, ""], [:TEXT, "\nfoo\n"],
|
46
75
|
[:PARA_END, ""], [:PRE, "Hehe"], [false, false]])
|
76
|
+
assert_equal(lex("\r\n----\r\nfoo\r\n Hehe"),
|
77
|
+
[[:HLINE, "----"], [:PARA_START, ""], [:TEXT, "\r\nfoo\r\n"],
|
78
|
+
[:PARA_END, ""], [:PRE, "Hehe"], [false, false]])
|
47
79
|
end
|
48
80
|
|
49
81
|
def test_bullets
|
@@ -57,6 +89,11 @@ class Lexer_Test < Test::Unit::TestCase
|
|
57
89
|
[:UL_END, ""], [:LI_END, ""], [:UL_END, ""], [false, false]])
|
58
90
|
end
|
59
91
|
|
92
|
+
def test_bullets_at_eof
|
93
|
+
assert_equal(lex("* Foo\n*"),
|
94
|
+
[[:UL_START, nil], [:LI_START, ""], [:TEXT, "Foo\n"], [:LI_END, ""], [:LI_START, ""], [:LI_END, ""], [:UL_END, ""], [false, false]])
|
95
|
+
end
|
96
|
+
|
60
97
|
private
|
61
98
|
def lex(string)
|
62
99
|
lexer = MediaWikiLexer.new
|