mediacloth 0.0.3 → 0.5
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/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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'builder'
|
|
3
|
+
|
|
4
|
+
# A link handler is responsible for resolving the URL and generating the HTML
|
|
5
|
+
# code linking to pages and other resources (images and media, for example)
|
|
6
|
+
# based on a wiki short name.
|
|
7
|
+
#
|
|
8
|
+
# This is the default link handler. A custom link handler will usually extend
|
|
9
|
+
# this class and provide the needed functionality by overriding some of the
|
|
10
|
+
# methods. The custom handler can be injected into an HTML generator via the
|
|
11
|
+
# link_handler= method. See MediaWikiHTMLGenerator for details.
|
|
12
|
+
class MediaWikiLinkHandler
|
|
13
|
+
|
|
14
|
+
#Method invoked to resolve references to wiki pages when they occur in an
|
|
15
|
+
#internal link. In all the following internal links, the page name is
|
|
16
|
+
#<tt>My Page</tt>:
|
|
17
|
+
#* <tt>[[My Page]]</tt>
|
|
18
|
+
#* <tt>[[My Page|Click here to view my page]]</tt>
|
|
19
|
+
#* <tt>[[My Page|Click ''here'' to view my page]]</tt>
|
|
20
|
+
#The return value should be an URL that references the page resource
|
|
21
|
+
def url_for(page)
|
|
22
|
+
"javascript:void(0)"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#Provides a hash with the attributes for page links. The options provided
|
|
26
|
+
#here will be added to the 'a' tag attributes and overwrite any options
|
|
27
|
+
#provided by the url_for method. If this method needs to be overriden, an URL
|
|
28
|
+
#reference must be provided here indexed by the <tt>:href</tt> symbol.
|
|
29
|
+
def link_attributes_for(page)
|
|
30
|
+
{ :href => url_for(page) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#Renders a link to a wiki page as a string. The default behaviour is to
|
|
34
|
+
#return an 'a' tag, but any string can be used here like span, or bold
|
|
35
|
+
#tags. This method overwrites anything provided by the <tt>url_for</tt>,
|
|
36
|
+
#<tt>options_for</tt> or <tt>link_attributes_for</tt> methods.
|
|
37
|
+
#
|
|
38
|
+
#The <tt>elem</tt> method may be used by subclasses for easier and safer text
|
|
39
|
+
#handling. For example: <tt>elem.a(:href => 'http://www.example.com')
|
|
40
|
+
#{ |x| x << text }</tt> will emit a link for example.com with the given link
|
|
41
|
+
#text
|
|
42
|
+
def link_for(page, text)
|
|
43
|
+
elem.a(link_attributes_for(page)) { |x| x << text }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#Method invoked to resolve references to resources of unknown types. The
|
|
47
|
+
#type is indicated by the resource prefix. Examples of inline links to
|
|
48
|
+
#unknown references include:
|
|
49
|
+
#* <tt>[[Media:video.mpg]]</tt> (prefix <tt>Media</tt>, resource <tt>video.mpg</tt>)
|
|
50
|
+
#* <tt>[[Image:pretty.png|100px|A ''pretty'' picture]]</tt> (prefix <tt>Image</tt>,
|
|
51
|
+
# resource <tt>pretty.png</tt>, and options <tt>100px</tt> and <tt>A
|
|
52
|
+
# <i>pretty</i> picture</tt>.
|
|
53
|
+
#The return value should be a well-formed hyperlink, image, object or
|
|
54
|
+
#applet tag.
|
|
55
|
+
def link_for_resource(prefix, resource, options=[])
|
|
56
|
+
"<a href=\"#{prefix}:#{resource}\">#{prefix}:#{resource}</a>"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def category_add(name, sort)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def link_for_category(category, text)
|
|
63
|
+
"<a href=\"javascript:void(0)\">#{text}</a>"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#This is invoked to generate an absolute link to a page
|
|
67
|
+
#when user either puts url onto the page
|
|
68
|
+
#or uses regular [] syntax
|
|
69
|
+
#
|
|
70
|
+
#link_type argument is either empty string or "[". Empty string indicates url written as plain text
|
|
71
|
+
#and "[" indicates that [] syntax for links was used
|
|
72
|
+
def absolute_link_for(page, text, link_type)
|
|
73
|
+
if page =~ /(^|\/)([^\/]*)((\.png)|(\.jpg)|(\.jpeg)|(\.gif))$/ and link_type.blank?
|
|
74
|
+
"<img src=\"#{page}\" alt=\"#{$2}#{$3}\" />"
|
|
75
|
+
else
|
|
76
|
+
"<a href=\"#{page}\">#{text}</a>"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
protected
|
|
81
|
+
|
|
82
|
+
#A Builder object for rendering XHTML code without having to deal directly
|
|
83
|
+
#with text. See http://builder.rubyforge.org for usage details.
|
|
84
|
+
def elem
|
|
85
|
+
Builder::XmlMarkup.new
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
@@ -6,9 +6,6 @@ require 'singleton'
|
|
|
6
6
|
#parser environment variables.
|
|
7
7
|
class MediaWikiParams
|
|
8
8
|
|
|
9
|
-
#MediaWikiParams is a signleton class
|
|
10
|
-
include Singleton
|
|
11
|
-
|
|
12
9
|
#The name of the wiki page author
|
|
13
10
|
attr_accessor :author
|
|
14
11
|
|
|
@@ -16,14 +13,8 @@ class MediaWikiParams
|
|
|
16
13
|
@author = "Creator"
|
|
17
14
|
end
|
|
18
15
|
|
|
19
|
-
#Creation time of the page. Use overrideTime method to override
|
|
20
|
-
#the value (useful for testing purposes).
|
|
21
16
|
def time
|
|
22
|
-
|
|
23
|
-
return @time
|
|
24
|
-
else
|
|
25
|
-
return Time.now
|
|
26
|
-
end
|
|
17
|
+
(@time || Time.now.utc).strftime("%a %b %d, %Y %H:%M")
|
|
27
18
|
end
|
|
28
19
|
|
|
29
20
|
def time=(t)
|