Decorator
that outputs markdown.markdown :: ManDecorator :: defaultinit
markdown :: ManDecorator :: headlines=
markdown $ ManDecorator :: SELF
Type of this instance, automatically specialized in every classmarkdown $ ManDecorator :: add_blockquote
Render a blockquote.markdown $ ManDecorator :: add_headline
Render a headline block with corresponding level.markdown $ ManDecorator :: add_line_break
Render a line breakmarkdown $ ManDecorator :: add_listitem
Render a list item.markdown $ ManDecorator :: add_orderedlist
Render an ordered list.markdown $ ManDecorator :: add_paragraph
Render a paragraph block.markdown $ ManDecorator :: add_ruler
Render a ruler block.markdown $ ManDecorator :: add_span_code
Render a code span reading from a buffer.markdown $ ManDecorator :: add_strike
Render a strike text.markdown $ ManDecorator :: add_strong
Render a strong text.markdown $ ManDecorator :: add_unorderedlist
Render an unordered list.markdown $ ManDecorator :: append_code
Render code text from buffer and escape it.markdown $ ManDecorator :: append_value
Render a text and escape it.markdown $ ManDecorator :: escape_char
Render a character escape.markdown :: Decorator :: add_blockquote
Render a blockquote.markdown :: Decorator :: add_headline
Render a headline block with corresponding level.markdown :: Decorator :: add_line_break
Render a line breakmarkdown :: Decorator :: add_listitem
Render a list item.markdown :: Decorator :: add_orderedlist
Render an ordered list.markdown :: Decorator :: add_paragraph
Render a paragraph block.markdown :: Decorator :: add_span_code
Render a code span reading from a buffer.markdown :: Decorator :: add_strike
Render a strike text.markdown :: Decorator :: add_strong
Render a strong text.markdown :: Decorator :: add_unorderedlist
Render an unordered list.markdown :: Decorator :: add_wikilink
Renders a[[wikilink]]
item.
markdown :: Decorator :: append_code
Render code text from buffer and escape it.markdown :: Decorator :: append_value
Render a text and escape it.core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
markdown :: Decorator :: defaultinit
core :: Object :: defaultinit
markdown :: ManDecorator :: defaultinit
markdown :: Decorator :: escape_char
Render a character escape.markdown :: ManDecorator :: headlines=
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: output_class_name
Display class name on stdout (debug only).
# `Decorator` that outputs markdown.
class ManDecorator
super Decorator
redef var headlines = new ArrayMap[String, HeadLine]
redef fun add_ruler(v, block) do v.add "***\n"
redef fun add_headline(v, block) do
var lvl = block.depth
if lvl == 1 then
v.add ".SH "
else if lvl == 2 then
v.add ".SS "
else if lvl >= 3 then
# We use dictionary (titled paragraph) to simulate a 3rd level (or more)
v.add ".TP\n"
end
v.emit_in block
v.addn
end
redef fun add_paragraph(v, block) do
if not in_unorderedlist and not in_orderedlist then
v.addn
v.emit_in block
v.addn
else
v.emit_in block
end
end
redef fun add_code(v, block) do
v.add ".RS\n.nf\n\\f[C]\n"
v.emit_in block
v.addn
v.add "\\f[]\n.fi\n.RE\n"
end
redef fun add_blockquote(v, block) do
v.add ".RS\n"
v.emit_in block
v.add ".RE\n"
end
redef fun add_unorderedlist(v, block) do
v.add ".RS\n"
in_unorderedlist = true
v.emit_in block
in_unorderedlist = false
v.add ".RE\n"
end
private var in_unorderedlist = false
redef fun add_orderedlist(v, block) do
v.add ".RS\n"
in_orderedlist = true
current_li = 0
v.emit_in block
in_orderedlist = false
v.add ".RE\n"
end
private var in_orderedlist = false
private var current_li = 0
redef fun add_listitem(v, block) do
if in_unorderedlist then
v.add ".IP \\[bu] 3\n"
else if in_orderedlist then
current_li += 1
v.add ".IP \"{current_li}.\" 3\n"
end
v.emit_in block
v.addn
end
redef fun add_em(v, text) do
v.add "\\f[I]"
v.add text
v.add "\\f[]"
end
redef fun add_strong(v, text) do
v.add "\\f[B]"
v.add text
v.add "\\f[]"
end
redef fun add_strike(v, text) do
v.add "[STRIKEOUT:"
v.add text
v.add "]"
end
redef fun add_image(v, link, name, comment) do
v.add name
v.add " ("
append_value(v, link)
if comment != null and not comment.is_empty then
v.add " "
append_value(v, comment)
end
v.add ")"
end
redef fun add_link(v, link, name, comment) do
v.add name
v.add " ("
append_value(v, link)
if comment != null and not comment.is_empty then
v.add " "
append_value(v, comment)
end
v.add ")"
end
redef fun add_abbr(v, name, comment) do
v.add "\">"
v.emit_text(name)
v.add " ("
append_value(v, comment)
v.add ")"
end
redef fun add_span_code(v, text, from, to) do
v.add "\\f[C]"
append_code(v, text, from, to)
v.add "\\f[]"
end
redef fun add_line_break(v) do
v.addn
end
redef fun append_value(v, text) do for c in text do escape_char(v, c)
redef fun add_char(v, c) do
# Escape - because manpages
if c == '-' then
v.addc '\\'
end
v.addc(c)
end
redef fun escape_char(v, c) do add_char(v, c)
redef fun append_code(v, buffer, from, to) do
for i in [from..to[ do
var c = buffer[i]
if c == '-' or c == ' ' then
v.addc '\\'
end
v.addc c
end
end
end
lib/markdown/man.nit:20,1--175,3