class RD::RD2MANVisitor

Constants

INCLUDE_SUFFIX
OUTPUT_SUFFIX

must-have constants

SYSTEM_NAME
SYSTEM_VERSION
VERSION

Public Class Methods

new() click to toggle source
# File lib/rd/rd2man-lib.rb, line 31
def initialize
  @enumcounter = 0
  @index = {}
  @filename = nil
end
version() click to toggle source
# File lib/rd/rd2man-lib.rb, line 23
def self.version
  VERSION
end

Public Instance Methods

apply_to_Code(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 162
def apply_to_Code(element, content)
  %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
end
apply_to_DescList(element, items) click to toggle source
# File lib/rd/rd2man-lib.rb, line 90
def apply_to_DescList(element, items)
  items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
end
apply_to_DescListItem(element, term, description) click to toggle source
# File lib/rd/rd2man-lib.rb, line 107
def apply_to_DescListItem(element, term, description)
  anchor = refer(element)
  if description.empty?
    ".TP\n.fi\n.B\n#{term.join(" ")}"
  else
    %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}].chomp
  end
end
apply_to_DocumentElement(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 42
    def apply_to_DocumentElement(element, content)
      content = content.join
      title = guess_title
      title = title.sub(/\.rd$/i, '').upcase
      <<"EOT"
.\\" DO NOT MODIFY THIS FILE! it was generated by rd2
.TH #{title} 1 "#{Time.now.strftime '%B %Y'}"
#{content}
EOT
    end
apply_to_Emphasis(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 158
def apply_to_Emphasis(element, content)
  %Q[\\fI#{content.join}\\fP]
end
apply_to_EnumList(element, items) click to toggle source
# File lib/rd/rd2man-lib.rb, line 85
def apply_to_EnumList(element, items)
  @enumcounter = 0
  items.join
end
apply_to_EnumListItem(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 102
def apply_to_EnumListItem(element, content)
  @enumcounter += 1
  %Q[.TP\n#{@enumcounter}.\n#{content.join("\n")}]
end
apply_to_Footnote(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 215
def apply_to_Footnote(element, content)
  ""
end
apply_to_Headline(element, title) click to toggle source
# File lib/rd/rd2man-lib.rb, line 53
def apply_to_Headline(element, title)
  title = title.join(" ")
  element.level <= 1 ? ".SH #{title}\n" : ".SS #{title}\n"
end
apply_to_Index(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 174
def apply_to_Index(element, content)
  tmp = []
  element.each do |i|
    tmp.push(i) if i.is_a?(String)
  end
  key = meta_char_escape(tmp.join)
  if @index.has_key?(key)
    # warning?
    ""
  else
    num = @index[key] = @index.size
    %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
  end
end
apply_to_ItemList(element, items) click to toggle source
# File lib/rd/rd2man-lib.rb, line 79
def apply_to_ItemList(element, items)
  items.collect! do |x| x.sub(/\n\n/, "\n") end
  items = items.join(".IP\n.B\n\\(bu\n")  # "\\(bu" -> "" ?
  ".IP\n.B\n\\(bu\n" + items
end
apply_to_ItemListItem(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 98
def apply_to_ItemListItem(element, content)
  content.map{ |c| c =~ /\n$/ ? c : c + "\n" }.join("")
end
apply_to_Keyboard(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 170
def apply_to_Keyboard(element, content)
  content.join
end
apply_to_MethodList(element, items) click to toggle source
# File lib/rd/rd2man-lib.rb, line 94
def apply_to_MethodList(element, items)
  items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
end
apply_to_MethodListItem(element, term, description) click to toggle source
# File lib/rd/rd2man-lib.rb, line 116
def apply_to_MethodListItem(element, term, description)
  term = parse_method(term)  # maybe: term -> element.term
  anchor = refer(element)
  if description.empty?
    ".TP\n.fi\n.B\n#{term.join(" ")}"
  else
    %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}]
  end
end
apply_to_RefToElement(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 202
def apply_to_RefToElement(element, content)
  content = content.join
  content.sub(/^function#/, "")
end
apply_to_RefToOtherFile(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 207
def apply_to_RefToOtherFile(element, content)
  content.join
end
apply_to_RefToURL(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 211
def apply_to_RefToURL(element, content)
  content.join
end
apply_to_Reference(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 189
def apply_to_Reference(element, content)
  case element.label
  when Reference::URL
    apply_to_RefToURL(element, content)
  when Reference::RDLabel
    if element.label.filename
      apply_to_RefToOtherFile(element, content)
    else
      apply_to_RefToElement(element, content)
    end
  end
end
apply_to_String(element) click to toggle source
# File lib/rd/rd2man-lib.rb, line 223
def apply_to_String(element)
  meta_char_escape(element)
end
apply_to_StringElement(element) click to toggle source
# File lib/rd/rd2man-lib.rb, line 154
def apply_to_StringElement(element)
  apply_to_String(element.content)
end
apply_to_TextBlock(element, content) click to toggle source

RDVisitor#apply_to_Include

# File lib/rd/rd2man-lib.rb, line 60
def apply_to_TextBlock(element, content)
  if RD::DescListItem === element.parent ||
      RD::ItemListItem === element.parent ||
      RD::EnumListItem === element.parent
    return content.join
  else
    return ".PP\n" + content.join
  end
end
apply_to_Var(element, content) click to toggle source
# File lib/rd/rd2man-lib.rb, line 166
def apply_to_Var(element, content)
  content.join
end
apply_to_Verb(element) click to toggle source
# File lib/rd/rd2man-lib.rb, line 219
def apply_to_Verb(element)
  apply_to_String(element.content)
end
apply_to_Verbatim(element) click to toggle source
# File lib/rd/rd2man-lib.rb, line 70
def apply_to_Verbatim(element)
  content = []
  element.each_line do |i|
    content.push(apply_to_String(i))
  end
  # Can we use BLOCKQUOTE such like?
  %Q[.nf\n\\&    #{content.join("\\&    ")}.fi\n]
end
visit(tree) click to toggle source
Calls superclass method
# File lib/rd/rd2man-lib.rb, line 37
def visit(tree)
  prepare_labels(tree, "")
  super(tree)
end

Private Instance Methods

guess_title() click to toggle source
# File lib/rd/rd2man-lib.rb, line 232
def guess_title
  return @input_filename unless @input_filename == "-"
  return @filename if @filename
  "Untitled"
end
meta_char_escape(str) click to toggle source
# File lib/rd/rd2man-lib.rb, line 227
def meta_char_escape(str)
  str.gsub(/[-\\]/, '\\\\\\&').gsub(/^[.']/, '\\&') # '
end
parse_method(method) click to toggle source
# File lib/rd/rd2man-lib.rb, line 126
def parse_method(method)
  klass, kind, method, args = MethodParse.analize_method(method)

  if kind == :function
    klass = kind = nil
  else
    kind = MethodParse.kind2str(kind)
  end

  case method
  when "[]"
    args.strip!
    args.sub!(/^\((.*)\)$/, '\\1')
    "#{klass}#{kind}[#{args}]"
  when "[]="
    args.strip!
    args.sub!(/^\((.*)\)$/, '\\1')
    args, val = /^(.*),([^,]*)$/.match(args)[1,2]
    args.strip!
    val.strip!

    "#{klass}#{kind}[#{args}] = #{val}"
  else
    "#{klass}#{kind}#{method}#{args}"
  end
end