Parent

RDoc::Markup

RDoc::Markup parses plain text documents and attempts to decompose them into their constituent parts. Some of these parts are high-level: paragraphs, chunks of verbatim text, list entries and the like. Other parts happen at the character level: a piece of bold text, a word in code font. This markup is similar in spirit to that used on WikiWiki webs, where folks create web pages using a simple set of formatting rules.

RDoc::Markup itself does no output formatting: this is left to a different set of classes.

RDoc::Markup is extendable at runtime: you can add new markup elements to be recognised in the documents that RDoc::Markup parses.

RDoc::Markup is intended to be the basis for a family of tools which share the common requirement that simple, plain-text should be rendered in a variety of different output formats and media. It is envisaged that RDoc::Markup could be the basis for formatting RDoc style comment blocks, Wiki entries, and online FAQs.

Synopsis

This code converts input_string to HTML. The conversion takes place in the convert method, so you can use the same RDoc::Markup converter to convert multiple input strings.

  require 'rdoc/markup/to_html'

  h = RDoc::Markup::ToHtml.new

  puts h.convert(input_string)

You can extend the RDoc::Markup parser to recognise new markup sequences, and to add special processing for text that matches a regular expression. Here we make WikiWords significant to the parser, and also make the sequences {word} and text... signify strike-through text. When then subclass the HTML output class to deal with these:

  require 'rdoc/markup'
  require 'rdoc/markup/to_html'

  class WikiHtml < RDoc::Markup::ToHtml
    def handle_special_WIKIWORD(special)
      "<font color=red>" + special.text + "</font>"
    end
  end

  m = RDoc::Markup.new
  m.add_word_pair("{", "}", :STRIKE)
  m.add_html("no", :STRIKE)

  m.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)

  wh = WikiHtml.new
  wh.add_tag(:STRIKE, "<strike>", "</strike>")

  puts "<body>#{wh.convert ARGF.read}</body>"

Attributes

attribute_manager[R]

Public Class Methods

new() click to toggle source

Take a block of text and use various heuristics to determine it’s structure (paragraphs, lists, and so on). Invoke an event handler as we identify significant chunks.

    # File lib/rdoc/markup.rb, line 75
75:   def initialize
76:     @attribute_manager = RDoc::Markup::AttributeManager.new
77:     @output = nil
78:   end

Public Instance Methods

add_html(tag, name) click to toggle source

Add to the sequences recognized as general markup.

    # File lib/rdoc/markup.rb, line 92
92:   def add_html(tag, name)
93:     @attribute_manager.add_html(tag, name)
94:   end
add_special(pattern, name) click to toggle source

Add to other inline sequences. For example, we could add WikiWords using something like:

   parser.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)

Each wiki word will be presented to the output formatter via the accept_special method.

     # File lib/rdoc/markup.rb, line 105
105:   def add_special(pattern, name)
106:     @attribute_manager.add_special(pattern, name)
107:   end
add_word_pair(start, stop, name) click to toggle source

Add to the sequences used to add formatting to an individual word (such as bold). Matching entries will generate attributes that the output formatters can recognize by their name.

    # File lib/rdoc/markup.rb, line 85
85:   def add_word_pair(start, stop, name)
86:     @attribute_manager.add_word_pair(start, stop, name)
87:   end
convert(text, formatter) click to toggle source

We take text, parse it then invoke the output formatter using a Visitor to render the result.

     # File lib/rdoc/markup.rb, line 113
113:   def convert text, formatter
114:     document = RDoc::Markup::Parser.parse text
115: 
116:     document.accept formatter
117:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.