protected function _doTable(&$content, array &$args = array())
    {
        $table = new TableTool(
            isset($content['body']) && is_array($content['body']) ? $content['body'] : array($content),
            isset($content['head']) && is_array($content['head']) ? $content['head'] : array(),
            isset($content['foot']) && is_array($content['foot']) ? $content['foot'] : array()
        );
        $table_stacks = $table->getTable();

        // each line building
        $table_content = '';
        foreach(self::$table_scopes as $scope) {
            $scope_lines = '';
            if (isset($table_stacks[$scope]) && is_array($table_stacks[$scope]) && !empty($table_stacks[$scope])) {
                $my_line = '';
                foreach($table_stacks[$scope] as $line) {
                    $this->_doTableLine($line, $args, $scope);
                    $my_line .= $line;
                }
                $scope_lines .= $my_line;
            }
            $scope_args = $this->_getArgsStack($args, $scope);
            $scope_tag = 'table_'.$scope;
            $table_content .= $this->_tagComposer($scope_lines, $scope_tag, $scope_args);
        }

        // caption
        if (isset($table_stacks['title'])) {
            $caption_args = $this->_getArgsStack($args, 'title');
            $caption_tag = 'table_title';
            $caption = $this->_tagComposer($table_stacks['title'], $caption_tag, $caption_args);
            $table_content = $caption.$table_content;
        }

        $this->_purgeArgsStackForTable($args, 'cell');
        $this->_purgeArgsStackForTable($args, 'line');

        $content = $table_content;
    }