Sha256: efb33fb516885aace42749887dbe1ba0848cd66808e21c8e3f352a4ff55841c4

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

require "md2pukiwiki/version"

module Md2pukiwiki
  def self.convert(text)
    text.lines.map do |line|
      new_line = line.chomp

      new_line = convert_header(new_line)
      new_line = convert_list(new_line)
      new_line = convert_numbered_list(new_line)

      new_line = convert_bold_text(new_line)
      new_line = convert_italic_text(new_line)
      new_line = convert_strikethrough_text(new_line)

      new_line = convert_image(new_line)
      new_line = convert_link(new_line)

      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_text(line)
    line.gsub(/(?:\*{2}|_{2})(?<bold>.+?)(?:\*{2}|_{2})/, "''\\k<bold>''")
  end

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

  def self.convert_strikethrough_text(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.1 lib/md2pukiwiki.rb