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

Hello, World.

With other stuff: >> puts MultiMarkdown.new('"Hello World!"', :no_smart_quotes).to_html

"Hello World!"

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.2"
MMD_VERSION =
rb_str_new_cstr(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_keys ⇒ Object

Return Array of metadata keys



141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'ext/ruby_multi_markdown.c', line 141

static VALUE rb_multimarkdown_extract_metadata_keys(VALUE self) {
  mmd_engine *engine = get_mmd_engine(self);
  size_t end = 0;

  if (!mmd_engine_has_metadata(engine, &end)) {
    return rb_ary_new();
  }

  char *metadata_keys = mmd_engine_metadata_keys(engine);
  VALUE str = rb_utf8_str_new_cstr(metadata_keys);
  free(metadata_keys);

  return rb_funcall(str, rb_intern("split"), 1, rb_str_new_cstr("\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



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'ext/ruby_multi_markdown.c', line 156

static VALUE rb_multimarkdown_extract_metadata_value(VALUE self, VALUE key) {
  Check_Type(key, T_STRING);

  mmd_engine *engine = get_mmd_engine(self);
  size_t end = 0;

  if (!mmd_engine_has_metadata(engine, &end)) {
    return Qnil;
  }

  char *metadata = mmd_engine_metavalue_for_key(engine, StringValueCStr(key));
  if (metadata == NULL) {
    return Qnil;
  }

  return rb_utf8_str_new_cstr(metadata);
}

#language=(language) ⇒ Object

** Public Methods



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'ext/ruby_multi_markdown.c', line 101

static VALUE rb_multimarkdown_set_language(VALUE self, VALUE language) {
  short lang = ENGLISH;

  VALUE language_s = rb_obj_as_string(language);
  const char *s = StringValueCStr(language_s);

  if (strcmp(s, "de") == 0 || strcmp(s, "german") == 0) {
    lang = GERMANGUILL;
  } else if (strcmp(s, "ch") == 0 || strcmp(s, "de-ch") == 0 || strcmp(s, "swiss") == 0) {
    lang = GERMAN;
  } else if (strcmp(s, "nl") == 0 || strcmp(s, "dutch") == 0) {
    lang = DUTCH;
  } else if (strcmp(s, "fr") == 0 || strcmp(s, "french") == 0) {
    lang = FRENCH;
  } else if (strcmp(s, "sp") == 0 || strcmp(s, "spanish") == 0) {
    lang = SPANISH;
  } else if (strcmp(s, "sv") == 0 || strcmp(s, "swedish") == 0) {
    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 @cached_metadata.nil?
    @cached_metadata = {}
    .each do |k|
      @cached_metadata[k.downcase] = (k)
    end
  end

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

#to_html ⇒ Object

Return string containing HTML generated from MultiMarkdown text



125
126
127
128
129
130
131
# File 'ext/ruby_multi_markdown.c', line 125

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_latex ⇒ Object

Return string containing latex generated from MultiMarkdown text



133
134
135
136
137
138
139
# File 'ext/ruby_multi_markdown.c', line 133

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;
}