File: link.rb

package info (click to toggle)
ruby-wikicloth 0.8.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, stretch
  • size: 588 kB
  • ctags: 278
  • sloc: ruby: 2,548; makefile: 14
file content (93 lines) | stat: -rw-r--r-- 2,567 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
module WikiCloth

class WikiBuffer::Link < WikiBuffer

  def initialize(data="",options={})
    super(data,options)
    @in_quotes = false
    @checktrailing = false
  end

  def internal_link
    @internal_link ||= false
  end

  def to_html
    link_handler = @options[:link_handler]
    unless self.internal_link || params[0].strip !~ /^\s*((([a-z]+):\/\/|mailto:)|[\?\/])(.*)/
      if $1.downcase == "mailto:"
	return link_handler.external_link("#{params[0]}".strip, $4)
      elsif params.length > 1
	return link_handler.external_link("#{params[0]}".strip, params.last.strip)
      else
	return link_handler.external_link("#{params[0]}".strip)
      end
    else
      case
      when !self.internal_link
        return "[#{params[0]}]"        
      when params[0] =~ /^:(.*)/
        return link_handler.link_for(params[0],params[1])
      when params[0] =~ /^\s*([^\]\s:]+)\s*:(.*)$/
        return link_handler.link_for_resource($1,$2,params[1..-1])
      else
        return "" if params[0].blank? && params[1].blank?
        return link_handler.link_for(params[0],params[1])
      end
    end
  end

  def eof()
    self.current_param = self.data
  end

  protected
  def internal_link=(val)
    @internal_link = (val == true ? true : false)
  end

  def new_char()
    case
    when @checktrailing && current_char !~ /\w/
      self.current_param = self.data
      self.data = current_char == '{' ? "" : current_char
      return false

    # check if this link is internal or external
    when previous_char.blank? && current_char == '['
      self.internal_link = true

    # Marks the beginning of another paramater for
    # the current object
    when current_char == '|' && self.internal_link == true && @in_quotes == false
      self.current_param = self.data
      self.data = ""
      self.params << ""

    # URL label
    when current_char == ' ' && self.internal_link == false && params[1].nil? && !self.data.blank?
      self.current_param = self.data
      self.data = ""
      self.params << ""

    # end of link
    when current_char == ']' && ((previous_char == ']' && self.internal_link == true) || self.internal_link == false)  && @in_quotes == false
      self.current_param = self.data
      if self.internal_link == true
        self.data.chop!.rstrip!
        self.params << "" unless self.params.size > 1
        @checktrailing = true
      else
        self.data = ""
        return false
      end
    else
      self.data += current_char unless current_char == ' ' && self.data.blank?
    end

    return true
  end

end

end