Custom parser for GitLab-flavored Markdown
It replaces references in the text with links to the appropriate items in GitLab.
Supported reference formats are:
* @foo for team members * #123 for issues * !123 for merge requests * $123 for snippets * 123456 for commits
It also parses Emoji codes to insert images. See www.emoji-cheat-sheet.com/ for a list of the supported icons.
Examples
>> gfm("Hey @david, can you fix this?") => "Hey <a href="/gitlab/team_members/1">@david</a>, can you fix this?" >> gfm("Commit 35d5f7c closes #1234") => "Commit <a href="/gitlab/commits/35d5f7c">35d5f7c</a> closes <a href="/gitlab/issues/1234">#1234</a>" >> gfm(":trollface:") => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" />
Public: Parse the provided text with GitLab-Flavored Markdown
text - the source text #html_options - extra options for the reference links as given to link_to
Note: reference links will only be generated if @project is set
# File lib/gitlab/markdown.rb, line 48 def gfm(text, html_options = {}) return text if text.nil? # Duplicate the string so we don't alter the original, then call to_str # to cast it back to a String instead of a SafeBuffer. This is required # for gsub calls to work as we need them to. text = text.dup.to_str @html_options = html_options # Extract pre blocks so they are not altered # from http://github.github.com/github-flavored-markdown/ extractions = {} text.gsub!(%r{<pre>.*?</pre>|<code>.*?</code>}) do |match| md5 = Digest::MD5.hexdigest(match) extractions[md5] = match "{gfm-extraction-#{md5}}" end # TODO: add popups with additional information text = parse(text) # Insert pre block extractions text.gsub!(%r\{gfm-extraction-(\h{32})\}/) do extractions[$1] end sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class) end