class Minidown::TextElement

Constants

EscapeChars
EscapeRegexp
Regexp

Attributes

convert[RW]
escape[RW]
sanitize[RW]

Public Class Methods

new(*_) click to toggle source
Calls superclass method Minidown::Element::new
# File lib/minidown/elements/text_element.rb, line 28
def initialize *_
  super
  @escape = true
  @sanitize = false
  @convert = true
end

Public Instance Methods

content() click to toggle source
Calls superclass method
# File lib/minidown/elements/text_element.rb, line 39
def content
  str = super
  str = convert_str(str) if convert
  escape_content! str
  escape_str! str
  escape_html str if sanitize
  str
end
convert_str(str) click to toggle source
# File lib/minidown/elements/text_element.rb, line 77
def convert_str str
  #auto link
  str.gsub! Regexp[:auto_link] do |origin_str|
    build_tag 'a'.freeze, href: origin_str do |a|
      a << origin_str
    end
  end
  
  #auto email
  str.gsub! Regexp[:auto_email] do |origin_str|
    build_tag 'a'.freeze, href: "mailto:#{origin_str}" do |a|
      a << origin_str
    end
  end
  
  #parse <link>
  str.gsub! Regexp[:quotlink] do |origin_str|
    link = $1
    attr = case link
           when Regexp[:link_scheme]
             {href: link}
           when Regexp[:email]
             {href: "mailto:#{link}"}
           end
    attr ? build_tag('a'.freeze, attr){|a| a << link} : origin_str
  end
       
  #parse * _
  Regexp.values_at(:star, :underline).each do |regex|
    str.gsub! regex do |origin_str|
      tag_name = $1.size > 1 ? 'strong'.freeze : 'em'.freeze
      build_tag tag_name do |tag|
        tag << $2
      end
    end
  end

  #parse ~~del~~
  str.gsub! Regexp[:delete_line] do |origin_str|
    build_tag 'del'.freeze do |tag|
      tag << $1
    end
  end

  #convert image reference
  str.gsub! Regexp[:image_ref] do |origin_str|
    alt = $1
    id = ($2 && !$2.empty?) ? $2 : $1
    ref = doc.links_ref[id.downcase]
    if ref
      attr = {src: ref[:url], alt: alt}
      attr[:title] = ref[:title] if ref[:title] && !ref[:title].empty?
      build_tag 'img'.freeze, attr
      else
      origin_str
    end
  end

  #convert image syntax
  str.gsub! Regexp[:image] do
    alt, url = $1, $2
    url =~ Regexp[:link_title]
    title = $1
    url =~ Regexp[:link_url]
    url = $1
    attr = {src: url, alt: alt}
    attr[:title] = title if title
    build_tag 'img'.freeze, attr
    end
  
  #convert link reference
  str.gsub! Regexp[:link_ref] do |origin_str|
    text = $1
    id = ($2 && !$2.empty?) ? $2 : $1
    ref = doc.links_ref[id.downcase]
    if ref
      attr = {href: ref[:url]}
      attr[:title] = ref[:title] if ref[:title] && !ref[:title].empty?
      build_tag 'a'.freeze, attr do |a|
        a << text
      end
    else
      origin_str
    end
  end

  #convert link syntax
  str.gsub! Regexp[:link] do
    text, url = $1, $2
    url =~ Regexp[:link_title]
    title = $1
    url =~ Regexp[:link_url]
    url = $1
    attr = {href: url}
    attr[:title] = title if title
    build_tag 'a'.freeze, attr do |content|
      content << text
    end
  end

  escape_content! str
       
  #inline code
  str.gsub! Regexp[:inline_code] do |origin_str|
    build_tag 'code'.freeze do |code|
      code << escape_html($2)
    end
  end
  escape_str! str
  @escape = false
  str
end
escape_content!(str) click to toggle source
# File lib/minidown/elements/text_element.rb, line 56
def escape_content! str
  return str unless @escape
  escape_html str
  
  str.gsub! Regexp[:tag] do
    left, tag, right = $1, $2, $3
    tag.gsub! Regexp[:quot] do
      '"'.freeze
    end

    left = left.size.odd? ? "#{left[0..-2]}&lt;" : "#{left}<" if left
    left ||= "<".freeze

    right = right.size.odd? ? "#{right[0..-2]}&gt;" : "#{right}>" if right
    right ||= ">".freeze

    "#{left}#{tag}#{right}"
  end
  str
end
escape_html(str) click to toggle source
# File lib/minidown/elements/text_element.rb, line 52
def escape_html str
  str.replace Utils.escape_html(str)
end
escape_str!(str) click to toggle source
# File lib/minidown/elements/text_element.rb, line 48
def escape_str! str
  str.gsub!(EscapeRegexp, '\\1'.freeze) if escape
end
paragraph() click to toggle source
# File lib/minidown/elements/text_element.rb, line 190
def paragraph
  ParagraphElement.new doc, raw_content
end
parse() click to toggle source
# File lib/minidown/elements/text_element.rb, line 35
def parse
  nodes << self
end
to_html() click to toggle source
# File lib/minidown/elements/text_element.rb, line 194
def to_html
  content
end