Class: WikiCloth::Parser

Inherits:
WikiLinkHandler show all
Defined in:
lib/wikicloth/parser.rb

Constant Summary

Constants inherited from WikiLinkHandler

WikiLinkHandler::CATEGORY_NAMESPACES, WikiLinkHandler::FILE_NAMESPACES, WikiLinkHandler::LANGUAGE_NAMESPACES, WikiLinkHandler::MEDIA_NAMESPACES

Constants inherited from WikiNamespaces

WikiNamespaces::NAMESPACE_TYPES

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from WikiLinkHandler

#cache, #categories, #categories=, #external_link, #external_links, #external_links=, #find_reference_by_name, #function, #image_url_for, #include_resource, #included_templates, #internal_links, #internal_links=, #languages, #languages=, #link_attributes_for, #link_for, #link_for_resource, #params, #params=, #reference_index, #references, #references=, #section_link, #section_list, #template, #toc, #url_for

Methods inherited from WikiNamespaces

get_namespace_names_for, language_name, language_namespace_names, localise_ns, method_missing, namespace_type

Constructor Details

#initialize(options = {}) ⇒ Parser

Returns a new instance of Parser.


5
6
7
8
9
10
11
12
13
14
15
# File 'lib/wikicloth/parser.rb', line 5

def initialize(options={})
  options.each { |k,v|
    if v.instance_of?(Proc)
      self.class.send :define_method, k.to_sym do |*args|
        self.instance_exec(args,&v)
      end
    end
  }
  @options = { :link_handler => self, :params => {} }.merge(options)
  @wikicloth = WikiCloth.new(@options)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object


93
94
95
96
97
98
99
# File 'lib/wikicloth/parser.rb', line 93

def method_missing(method, *args)
  if @wikicloth.respond_to?(method)
    @wikicloth.send(method, *args)
  else
    super(method, *args)
  end
end

Class Method Details

.cache(&block) ⇒ Object


86
87
88
89
90
# File 'lib/wikicloth/parser.rb', line 86

def cache(&block)
  self.send :define_method, 'cache' do |item|
    self.instance_exec(item,&block)
  end
end

42
43
44
45
46
# File 'lib/wikicloth/parser.rb', line 42

def external_link(&block)
	self.send :define_method, 'external_link' do |url,text|
	  self.instance_exec(url,text,&block)
	end
end

.function(&block) ⇒ Object


36
37
38
39
40
# File 'lib/wikicloth/parser.rb', line 36

def function(&block)
	self.send :define_method, 'function' do |name, params|
	  self.instance_exec(name, params, &block)
	end
end

.image_url_for(&block) ⇒ Object


24
25
26
27
28
# File 'lib/wikicloth/parser.rb', line 24

def image_url_for(&block)
	self.send :define_method, 'image_url_for' do |url|
	  self.instance_exec(url, &block)
	end
end

.include_resource(&block) ⇒ Object


48
49
50
51
52
53
# File 'lib/wikicloth/parser.rb', line 48

def include_resource(&block)
	self.send :define_method, 'include_resource' do |resource,options|
	  options ||= []
	  self.instance_exec(resource,options,&block)
	end
end

80
81
82
83
84
# File 'lib/wikicloth/parser.rb', line 80

def link_attributes_for(&block)
	self.send :define_method, 'link_attributes_for' do |page|
	  self.instance_exec(page,&block)
	end
end

74
75
76
77
78
# File 'lib/wikicloth/parser.rb', line 74

def link_for(&block)
	self.send :define_method, 'link_for' do |page,text|
	  self.instance_exec(page,text,&block)
	end
end

61
62
63
64
65
66
# File 'lib/wikicloth/parser.rb', line 61

def link_for_resource(&block)
	self.send :define_method, 'link_for_resource' do |prefix,resource,options|
	  options ||= []
	  self.instance_exec(prefix,resource,options,&block)
	end
end

68
69
70
71
72
# File 'lib/wikicloth/parser.rb', line 68

def section_link(&block)
  self.send :define_method, 'section_link' do |section|
    self.instance_exec(section,&block)
  end
end

.template(&block) ⇒ Object


55
56
57
58
59
# File 'lib/wikicloth/parser.rb', line 55

def template(&block)
  self.send :define_method, 'template' do |template|
    self.instance_exec(template,&block)
  end
end

.toc(&block) ⇒ Object


30
31
32
33
34
# File 'lib/wikicloth/parser.rb', line 30

def toc(&block)
  self.send :define_method, 'toc' do |sections, numbered|
    self.instance_exec(sections, numbered, &block)
  end
end

.url_for(&block) ⇒ Object


18
19
20
21
22
# File 'lib/wikicloth/parser.rb', line 18

def url_for(&block)
  self.send :define_method, 'url_for' do |url|
    self.instance_exec(url, &block)
  end
end

Instance Method Details

#get_section(id) ⇒ Object

Get the section, along with any sub-section of the document


108
109
110
# File 'lib/wikicloth/parser.rb', line 108

def get_section(id)
  @wikicloth.sections.collect { |s| s.get_section(id) }.join
end

#put_section(id, data) ⇒ Object

Replace a section, along with any sub-section in the document


102
103
104
105
# File 'lib/wikicloth/parser.rb', line 102

def put_section(id,data)
  data = @wikicloth.sections.collect { |s| s.wikitext({ :replace => { id => data.last(1) == "\n" ? data : "#{data}\n" } }) }.join
  @wikicloth = WikiCloth.new(:data => data, :link_handler => self, :params => @options[:params])
end

#to_wikiObject


112
113
114
# File 'lib/wikicloth/parser.rb', line 112

def to_wiki
  to_wikitext
end

#to_wikitextObject


116
117
118
# File 'lib/wikicloth/parser.rb', line 116

def to_wikitext
  @wikicloth.sections.collect { |s| s.wikitext() }.join
end