Sha256: d405222bbaae451c291537a6c1e1fb3842ca3538ce1a9c1a827db880260ee954

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

require "md2pukiwiki/version"

module Md2pukiwiki
  def self.convert(text)
    decorated_type = %w{bold italic strikethrough}
    prefixed_type = %w{header list numbered_list}
    special_type = %w{image link}

    text.lines.map do |line|
      new_line = line.chomp

      [decorated_type, prefixed_type, special_type].flatten.each do |type|
        new_line = self.send("convert_#{type}", new_line)
      end

      new_line
    end.join("\n")
  end

  private

  # "# header" => "*header"
  def self.convert_header(line)
    if /\A(?<sharps>#+) (?<header>.+)\z/ =~ line
      "#{'*' * sharps.length}#{header}"
    else
      line
    end
  end

  # "* list" => "- list"
  def self.convert_list(line)
    if /\A(?<spaces>\s*)\* (?<list>.+)\z/ =~ line
      "#{'-' * (spaces.length / 4 + 1)} #{list}"
    else
      line
    end
  end

  # "1. list" => "+ list"
  def self.convert_numbered_list(line)
    if /\A(?<spaces>\s*)\d+\. (?<list>.+)\z/ =~ line
      "#{'+' * (spaces.length / 4 + 1)} #{list}"
    else
      line
    end
  end

  # "**bold**" => "''bold''"
  def self.convert_bold(line)
    line.gsub(/(?:\*{2}|_{2})(?<bold>.+?)(?:\*{2}|_{2})/, "''\\k<bold>''")
  end

  # "*italic*" => "'''italic'''"
  def self.convert_italic(line)
    line.gsub(/(?:\*{1}|_{1})(?<italic>.+?)(?:\*{1}|_{1})/, "'''\\k<italic>'''")
  end

  # "~~strikethrough~~" => "%%strikethrough%%"
  def self.convert_strikethrough(line)
    line.gsub(/~{2}(?<strikethrough>.+?)~{2}/, '%%\k<strikethrough>%%')
  end

  # "![text](image)" => "#ref(image,text)"
  def self.convert_image(line)
    line.gsub(/!\[(?<text>.+?)\]\((?<image>.+?)\)/, '#ref(\k<image>,\k<text>)')
  end

  # "[text](link)" => "[[text:link]]"
  def self.convert_link(line)
    line.gsub(/\[(?<text>.+?)\]\((?<link>.+?)\)/, '[[\k<text>:\k<link>]]')
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
md2pukiwiki-0.0.2 lib/md2pukiwiki.rb