In Files

  • ruby-3.1.2/lib/rdoc/markdown.rb

Files

Class/Module Index [+]

Quicksearch

RDoc::Markdown

RDoc::Markdown as described by the markdown syntax.

To choose Markdown as your only default format see Saved Options at RDoc::Options for instructions on setting up a .doc_options file to store your project default.

Usage

Here is a brief example of using this parse to read a markdown file by hand.

data = File.read("README.md")
formatter = RDoc::Markup::ToHtml.new(RDoc::Options.new, nil)
html = RDoc::Markdown.parse(data).accept(formatter)

# do something with html

Extensions

The following markdown extensions are supported by the parser, but not all are used in RDoc output by default.

RDoc

The RDoc Markdown parser has the following built-in behaviors that cannot be disabled.

Underscores embedded in words are never interpreted as emphasis. (While the markdown dingus emphasizes in-word underscores, neither the Markdown syntax nor MarkdownTest mention this behavior.)

For HTML output, RDoc always auto-links bare URLs.

Break on Newline

The break_on_newline extension converts all newlines into hard line breaks as in Github Flavored Markdown. This extension is disabled by default.

CSS

The css extension enables CSS blocks to be included in the output, but they are not used for any built-in RDoc output format. This extension is disabled by default.

Example:

<style type="text/css">
h1 { font-size: 3em }
</style>

Definition Lists

The definition_lists extension allows definition lists using the PHP Markdown Extra syntax, but only one label and definition are supported at this time. This extension is enabled by default.

Example:

cat
:   A small furry mammal
that seems to sleep a lot

ant
:   A little insect that is known
to enjoy picnics

Produces:

cat

A small furry mammal that seems to sleep a lot

ant

A little insect that is known to enjoy picnics

Strike

Example:

This is ~~striked~~.

Produces:

This is ~striked~.

Github

The github extension enables a partial set of Github Flavored Markdown. This extension is enabled by default.

Supported github extensions include:

Fenced code blocks

Use ``` around a block of code instead of indenting it four spaces.

Syntax highlighting

Use ``` ruby as the start of a code fence to add syntax highlighting. (Currently only ruby syntax is supported).

HTML

Enables raw HTML to be included in the output. This extension is enabled by default.

Example:

<table>
...
</table>

Notes

The notes extension enables footnote support. This extension is enabled by default.

Example:

Here is some text[^1] including an inline footnote ^[for short footnotes]

...

[^1]: With the footnote text down at the bottom

Produces:

Here is some text1 including an inline footnote 2

Limitations

  • Link titles are not used

  • Footnotes are collapsed into a single paragraph

Author

This markdown parser is a port to kpeg from peg-markdown by John MacFarlane.

It is used under the MIT license:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

The port to kpeg was performed by Eric Hodel and Evan Phoenix


1 With the footnote text down at the bottom

2 for short footnotes

Constants

DEFAULT_EXTENSIONS

Extensions enabled by default

EXTENSIONS

Supported extensions

Public Class Methods

new(extensions = DEFAULT_EXTENSIONS, debug = false) click to toggle source

Creates a new markdown parser that enables the given extensions.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 629
def initialize extensions = DEFAULT_EXTENSIONS, debug = false
  @debug      = debug
  @formatter  = RDoc::Markup::ToJoinedParagraph.new
  @extensions = extensions

  @references          = nil
  @unlinked_references = nil

  @footnotes       = nil
  @note_order      = nil
end
            
Also aliased as: orig_initialize
parse(markdown) click to toggle source

Parses the markdown document into an RDoc::Document using the default extensions.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 617
def self.parse markdown
  parser = new

  parser.parse markdown
end
            

Public Instance Methods

emphasis(text) click to toggle source

Wraps text in emphasis for rdoc inline formatting

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 644
def emphasis text
  if text =~ /\A[a-z\d.\/]+\z/i then
    "_#{text}_"
  else
    "<em>#{text}</em>"
  end
end
            
list_item_from(unparsed) click to toggle source

Creates an RDoc::Markup::ListItem by parsing the unparsed content from the first parsing pass.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 715
def list_item_from unparsed
  parsed = inner_parse unparsed.join
  RDoc::Markup::ListItem.new nil, *parsed
end
            
note(label) click to toggle source

Stores label as a note and fills in previously unknown note references.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 723
def note label
  #foottext = "rdoc-label:foottext-#{label}:footmark-#{label}"

  #ref.replace foottext if ref = @unlinked_notes.delete(label)

  @notes[label] = foottext

  #"{^1}[rdoc-label:footmark-#{label}:foottext-#{label}] "
end
            
note_for(ref) click to toggle source

Creates a new link for the footnote reference and adds the reference to the note order list for proper display at the end of the document.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 737
def note_for ref
  @note_order << ref

  label = @note_order.length

  "{*#{label}}[rdoc-label:foottext-#{label}:footmark-#{label}]"
end
            
orig_initialize(extensions = DEFAULT_EXTENSIONS, debug = false) click to toggle source

TODO remove when kpeg 0.10 is released

Alias for: new
paragraph(parts) click to toggle source

Creates an RDoc::Markup::Paragraph from parts and including extension-specific behavior

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 754
def paragraph parts
  parts = parts.map do |part|
    if "\n" == part then
      RDoc::Markup::HardBreak.new
    else
      part
    end
  end if break_on_newline?

  RDoc::Markup::Paragraph.new(*parts)
end
            
parse(markdown) click to toggle source

Parses markdown into an RDoc::Document

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 769
def parse markdown
  @references          = {}
  @unlinked_references = {}

  markdown += "\n\n"

  setup_parser markdown, @debug
  peg_parse 'References'

  if notes? then
    @footnotes       = {}

    setup_parser markdown, @debug
    peg_parse 'Notes'

    # using note_order on the first pass would be a bug
    @note_order      = []
  end

  setup_parser markdown, @debug
  peg_parse

  doc = result

  if notes? and not @footnotes.empty? then
    doc << RDoc::Markup::Rule.new(1)

    @note_order.each_with_index do |ref, index|
      label = index + 1
      note = @footnotes[ref]

      link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
      note.parts.unshift link

      doc << note
    end
  end

  doc.accept @formatter

  doc
end
            
Also aliased as: peg_parse
peg_parse(markdown) click to toggle source

The internal kpeg parse method

Alias for: parse
reference(label, link) click to toggle source

Stores label as a reference to link and fills in previously unknown link references.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 816
def reference label, link
  if ref = @unlinked_references.delete(label) then
    ref.replace link
  end

  @references[label] = link
end
            
strong(text) click to toggle source

Wraps text in strong markup for rdoc inline formatting

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 827
def strong text
  if text =~ /\A[a-z\d.\/-]+\z/i then
    "*#{text}*"
  else
    "<b>#{text}</b>"
  end
end
            

Extensions ↑ top

Public Class Methods

extension(name) click to toggle source

Creates extension methods for the name extension to enable and disable the extension and to query if they are active.

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 564
def self.extension name
  EXTENSIONS << name

  define_method "#{name}?" do
    extension? name
  end

  define_method "#{name}=" do |enable|
    extension name, enable
  end
end
            

Public Instance Methods

break_on_newline click to toggle source

Converts all newlines into hard breaks

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 579
extension :break_on_newline

            
css click to toggle source

Allow style blocks

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 584
extension :css

            
definition_lists click to toggle source

Allow PHP Markdown Extras style definition lists

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 589
extension :definition_lists

            
extension(name, enable) click to toggle source

Enables or disables the extension with name

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 666
def extension name, enable
  if enable then
    @extensions |= [name]
  else
    @extensions -= [name]
  end
end
            
extension?(name) click to toggle source

Is the extension name enabled?

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 657
def extension? name
  @extensions.include? name
end
            
github click to toggle source

Allow Github Flavored Markdown

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 594
extension :github

            
html click to toggle source

Allow HTML

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 599
extension :html

            
notes click to toggle source

Enables the notes extension

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 604
extension :notes

            
strike click to toggle source

Enables the strike extension

 
               # File ruby-3.1.2/lib/rdoc/markdown.rb, line 609
extension :strike