Class: MultiMarkdown

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_markdown.rb,
lib/multi_markdown/version.rb,
ext/ruby_multi_markdown.c

Overview

Front-end to fletcher penney’s implementation of MultiMarkdown

A simple processor:

>> puts MultiMarkdown.new('Hello, World.').to_html
<p>Hello, World.</p>

With other stuff:

>> puts MultiMarkdown.new('"Hello World!"', :no_smart_quotes).to_html
<p>&quot;Hello World!&quot;</p>

Constant Summary collapse

EXTENSIONS =
{
  "compatibility" => {:desc => "Markdown compatibility mode (disables all other options)", :short => "c"},
  "complete" => {:desc => "Force complete document", :short => "f"},
  "snippet" => {:desc => "Force snippet only", :short => "s"},
  "no_smart_quotes" => {:desc => "Disable Smart quotes", :short => false},
  "no_footnotes" => {:desc => "Disable Footnotes", :short => false},
  "no_anchors" => {:desc => "Don't add anchors to headers, etc.", :short => false},
  "process_html" => {:desc => "Process Markdown inside HTML", :short => false},
  "no_metadata" => {:desc => "Don't parse Metadata", :short => false},
  "obfuscate_email_addresses" => {:desc => "Mask email addresses", :short => false},
  "critic_markup_accept_all" => {:desc => "CriticMarkup: Accept all proposed changes", :short => "a"},
  "critic_markup_reject_all" => {:desc => "CriticMarkup: Reject all proposed changes", :short => "r"},
  "random_footnote_anchor_numbers" => {:desc => "Use random numbers for footnote link anchors", :short => false}
}
VERSION =

The ruby ‘multimarkdown’ gem version

"6.7.0.0"
MMD_VERSION =
rb_str_new2(version)

Instance Method Summary collapse

Constructor Details

#initialize(text, *extensions) ⇒ MultiMarkdown

Create a new MultiMarkdown processor. The ‘text` argument is a string containing MultiMarkdown text. Variable other arguments may be supplied to set various processing options. See MultiMarkdown::EXTENSIONS for more.



38
39
40
41
42
43
44
# File 'lib/multi_markdown.rb', line 38

def initialize(text, *extensions)
  extensions.each do |ext|
    raise "Unknown extension: #{ext.inspect}" unless EXTENSIONS.keys.include?(ext.to_s)
    send("#{ext}=", true)
  end
  self.start_engine(text);
end

Instance Method Details

#extract_metadata_keysObject

Return Array of metadata keys



129
130
131
132
133
134
135
# File 'ext/ruby_multi_markdown.c', line 129

static VALUE (VALUE self) {
  char * = (get_mmd_engine(self));
  VALUE str = rb_utf8_str_new_cstr();
  free();

  return rb_funcall(str, rb_intern("split"), 1, rb_str_new2("\n"));
}

#extract_metadata_value(key) ⇒ Object Also known as: extract_metadata

:call-seq: extract_metadata_value(key)

Fetches metadata specified by key from MultiMarkdown text



137
138
139
140
141
142
143
144
145
# File 'ext/ruby_multi_markdown.c', line 137

static VALUE (VALUE self, VALUE key) {
  Check_Type(key, T_STRING);
  char *pkey = StringValuePtr(key);

  char * = mmd_engine_metavalue_for_key(get_mmd_engine(self), pkey);
  VALUE result = rb_utf8_str_new_cstr();

  return result;
}

#language=(language) ⇒ Object

** Public Methods



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'ext/ruby_multi_markdown.c', line 85

static VALUE rb_multimarkdown_set_language(VALUE self, VALUE language) {
  short lang = ENGLISH;
  VALUE language_s = rb_funcall(language, rb_intern("to_s"), 0);

  if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("de")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("german")) == Qtrue) {
    lang = GERMANGUILL;
  }
  else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("ch")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("de-ch")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("swiss")) == Qtrue) {
    lang = GERMAN;
  }
  else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("nl")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("dutch")) == Qtrue) {
    lang = DUTCH;
  }
  else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("fr")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("french")) == Qtrue) {
    lang = FRENCH;
  }
  else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("sp")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("spanish")) == Qtrue) {
    lang = SPANISH;
  }
  else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("sv")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("swedish")) == Qtrue) {
    lang = SWEDISH;
  }

  mmd_engine_set_language(get_mmd_engine(self), lang);

  return language;
}

#metadata(key = nil) ⇒ Object

Returns a Hash cointaining all Metadata



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/multi_markdown.rb', line 51

def (key = nil)
  if .nil?
     = {}
    .each do |k|
      [k.downcase] = (k)
    end
  end

  if key
    [key.to_s.downcase]
  else
    .dup
  end
end

#to_htmlObject

Return string containing HTML generated from MultiMarkdown text



113
114
115
116
117
118
119
# File 'ext/ruby_multi_markdown.c', line 113

static VALUE rb_multimarkdown_to_html(VALUE self) {
  char *html = mmd_engine_convert(get_mmd_engine(self), FORMAT_HTML);
  VALUE result = rb_utf8_str_new_cstr(html);
  free(html);

  return result;
}

#to_latexObject

Return string containing latex generated from MultiMarkdown text



121
122
123
124
125
126
127
# File 'ext/ruby_multi_markdown.c', line 121

static VALUE rb_multimarkdown_to_latex(VALUE self) {
  char *latex = mmd_engine_convert(get_mmd_engine(self), FORMAT_LATEX);
  VALUE result = rb_utf8_str_new_cstr(latex);
  free(latex);

  return result;
}