- ')
            self.menu_began = True
        self.write('
- ') if link: self.write('', self._rel(link)) # Write the real menu entry text self.write(name) if link: self.write('') self.write(' ') def end_menu(self): """Ends an opened menu""" if not self.menu_began: raise RuntimeError('No menu had been started in the first place.') self.write('
---{}---\n',
                   'functions' if tlobject.is_function else 'types')
        # Write the function or type and its ID
        if tlobject.namespace:
            self.write(tlobject.namespace)
            self.write('.')
        self.write('{}#{:08x}', tlobject.name, tlobject.id)
        # Write all the arguments (or do nothing if there's none)
        for arg in tlobject.args:
            self.write(' ')
            add_link = not arg.generic_definition and not arg.is_generic
            # "Opening" modifiers
            if arg.generic_definition:
                self.write('{')
            # Argument name
            self.write(arg.name)
            self.write(':')
            # "Opening" modifiers
            if arg.is_flag:
                self.write('flags.{}?', arg.flag_index)
            if arg.is_generic:
                self.write('!')
            if arg.is_vector:
                self.write('Vector<',
                           self.type_to_path('vector'))
            # Argument type
            if arg.type:
                if add_link:
                    self.write('', self.type_to_path(arg.type))
                self.write(arg.type)
                if add_link:
                    self.write('')
            else:
                self.write('#')
            # "Closing" modifiers
            if arg.is_vector:
                self.write('>')
            if arg.generic_definition:
                self.write('}')
        # Now write the resulting type (result from a function/type)
        self.write(' = ')
        generic_name = next((arg.name for arg in tlobject.args
                             if arg.generic_definition), None)
        if tlobject.result == generic_name:
            # Generic results cannot have any link
            self.write(tlobject.result)
        else:
            if re.search('^vector<', tlobject.result, re.IGNORECASE):
                # Notice that we don't simply make up the "Vector" part,
                # because some requests (as of now, only FutureSalts),
                # use a lower type name for it (see #81)
                vector, inner = tlobject.result.split('<')
                inner = inner.strip('>')
                self.write('{}<',
                           self.type_to_path(vector), vector)
                self.write('{}>',
                           self.type_to_path(inner), inner)
            else:
                self.write('{}',
                           self.type_to_path(tlobject.result), tlobject.result)
        self.write('')
    def begin_table(self, column_count):
        """Begins a table with the given 'column_count', required to automatically
           create the right amount of columns when adding items to the rows"""
        self.table_columns = column_count
        self.table_columns_left = 0
        self.write('| ') if bold: self.write('') if link: self.write('', self._rel(link)) # Finally write the real table data, the given text self.write(text) if link: self.write('') if bold: self.write('') self.write('') self.table_columns_left -= 1 if not self.table_columns_left: self.write(' | 
{}
', text) def write_copy_button(self, text, text_to_copy): """Writes a button with 'text' which can be used to copy 'text_to_copy' to clipboard when it's clicked.""" self.write_copy_script = True self.write('' .format(text_to_copy, text)) def add_script(self, src='', path=None): if path: self._script += ''.format( self._rel(path)) elif src: self._script += ''.format(src) def end_body(self): """Ends the whole document. This should be called the last""" if self.write_copy_script: self.write( '' '' ) self.write('