Class: Mango::FlavoredMarkdown
- Inherits:
-
Object
- Object
- Mango::FlavoredMarkdown
- Defined in:
- lib/mango/flavored_markdown.rb
Overview
Mango::FlavoredMarkdown
(MFM) is a subset of GithubFlavoredMarkdown (GFM). MFM adds a touch
seasoning to the standard Markdown (SM) syntax.
Differences from standard Markdown
Newlines
The biggest difference that MFM introduces is in the handling of linebreaks. With SM you can hard wrap paragraphs of text and they will be combined into a single paragraph. I find this to be the cause of a huge number of unintentional formatting errors. MFM treats newlines in paragraph-like content as real line breaks, which is probably what you intended.
The next paragraph contains two phrases separated by a single newline character:
Roses are red
Violets are blue
becomes
Roses are red
Violets are blue
Multiple underscores in words
It is not reasonable to italicize just part of a word, especially when you're dealing with code and names often appear with multiple underscores. Therefore, MFM ignores multiple underscores in words.
perform_complicated_task
do_this_and_do_that_and_another_thing
becomes
perform_complicated_task
do_this_and_do_that_and_another_thing
Class Method Summary collapse
-
.shake(text) ⇒ String
For maximum flavor, add one shake of seasoning to markdown text before cooking with a Markdown engine.
-
.shake!(text) ⇒ Object
Destructively replaces the value of
text
with a shake ofFlavoredMarkdown
text.
Class Method Details
.shake(text) ⇒ String
For maximum flavor, add one shake of seasoning to markdown text before cooking with a Markdown engine.
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 |
# File 'lib/mango/flavored_markdown.rb', line 54 def self.shake(text) # Extract pre blocks extractions = {} text.gsub!(%r{<pre>.*?</pre>}m) do |match| md5 = Digest::MD5.hexdigest(match) extractions[md5] = match "{gfm-extraction-#{md5}}" end # prevent foo_bar_baz from ending up with an italic word in the middle text.gsub!(/(^(?! {4}|\t)\w+_\w+_\w[\w_]*)/) do |x| x.gsub("_", '\_') if x.split('').sort.join[0..1] == "__" end # in very clear cases, let newlines become <br /> tags text.gsub!(/^[\w\<][^\n]*\n+/) do |x| x =~ /\n{2}/ ? x : (x.strip!; x << " \n") end # Insert pre block extractions text.gsub!(/\{gfm-extraction-([0-9a-f]{32})\}/) do "\n\n" + extractions[$1] end text end |
.shake!(text) ⇒ Object
Destructively replaces the value of text
with a shake of FlavoredMarkdown
text
85 86 87 |
# File 'lib/mango/flavored_markdown.rb', line 85 def self.shake!(text) text.replace shake(text) end |