def METHOD_NAME(self, appname, synopsis=None, desc=None, long_desc=None):
    # title
    ret = []
    ret.append('.TH %s 1 %s\n' % (self._markup(appname.upper()), self._today.strftime('%Y\\-%m\\-%d')))
    # NAME section
    if desc:
        name = self._markup('%s - %s' % (self._markup(appname),
                                         desc.splitlines()[0]))
    else:
        name = self._markup(appname)
    ret.append('.SH NAME\n%s\n' % name)
    # SYNOPSIS section
    l = synopsis.split("\n")
    synopsis = l[0]
    synopsis = synopsis.replace('%s ' % appname, '', 1)
    # underline COMMAND and OPTIONS
    synopsis = re.sub(r'([\s^])(COMMAND)([\s$])', lambda pat: pat.group(1)+"\\fI"+pat.group(2)+"\\fP"+pat.group(3), synopsis)
    synopsis = re.sub(r'([\s^])(OPTIONS)([\s$])', lambda pat: pat.group(1)+"\\fI"+pat.group(2)+"\\fP"+pat.group(3), synopsis)
    ret.append('.SH SYNOPSIS\n.B %s\n%s\n' % (self._markup(appname),
                                              synopsis))
    # DESCRIPTION section
    if long_desc:
        ret.append('.SH DESCRIPTION\n%s\n' % self._markup(long_desc))
    # COMMANDS section
    commands = "\n".join(l[1:])
    # highlight actions
    commands = re.sub(r'^  ((svcmgr|nodemgr|svcmon) .*)$',
                      lambda pat: ".RE\n\\fB"+pat.group(1)+"\\fP\n.RS",
                      commands, flags=re.MULTILINE)
    # highlight sections
    commands = re.sub(r'^(\w.+)\n(-+)', lambda pat: "\\fR"+pat.group(1).upper()+"\\fP", commands, flags=re.MULTILINE)
    # remove rest markup
    commands = wipe_rest_markup(commands)
    if len(commands) > 0:
        ret.append('.SH COMMANDS\n%s\n' % commands)
    ret.append('.SH OPTIONS\n')
    return ''.join(ret)