table

tables: Tables using the same format as GFM https://help.github.com/articles/github-flavored-markdown#tables and PHP-Markdown Extra https://michelf.ca/projects/php-markdown/extra/#table.

之前代码里的表格一致无法正常工作,查了一下代码发现表格有专门的配置选项,它会检查配置里是否定义了tables这个参数

    def _run_block_gamut(self, text):
......

        if "pyshell" in self.extras:
            text = self._prepare_pyshell_blocks(text)
        if "wiki-tables" in self.extras:
            text = self._do_wiki_tables(text)
        if "tables" in self.extras:
            text = self._do_tables(text)

所以增加配置

        "extras": {
            "code-friendly": None,
            "pyshell": None,
            "demote-headers": 3,
            "link-patterns": None,
            # `class` attribute put on `pre` tags to enable using
            # <http://code.google.com/p/google-code-prettify/> for syntax
            # highlighting.
            "html-classes": {"pre": "prettyprint"},
            "cuddled-lists": None,
            "footnotes": None,
            "header-ids": None,
            # "fenced-code-blocks" : {'cssclass': 'mycodehilite', "prestyles":"background-color: #d2dee8;"},
            "fenced-code-blocks" : {'cssclass': 'mycodehilite',},
            "tables": None,
        },

生成的表格很丑,没有任何的css,回头仔细查代码看一下是否可配

生成的标题总是从3开始的,这样顶多能支持三级,因为最多能到h6.
这个可以通过在配置文件修改偏移demote-headers来减少。

代码如下

        "extras": {
            "header-ids": None, # show id for header
            "demote-headers": 2, # (origin 3), # starting from 3
            # "tag-friendly" : None, # for header
        },

header-idstag-friendly也是两个与header相关的配置

源代码如下

    def _do_headers(self, text):
        # Setext-style headers:
        # Header 1
        # ========
        #
        # Header 2
        # --------

        # atx-style headers:
        # # Header 1
        # ## Header 2
        # ## Header 2 with closing hashes ##
        # ...
        # ###### Header 6

        if 'tag-friendly' in self.extras:
            return self._h_re_tag_friendly.sub(self._h_sub, text)
        return self._h_re.sub(self._h_sub, text)

子函数中完成了对demote-header和header-ids等的处理

    _h_re = re.compile(_h_re_base % '*', re.X | re.M)
    _h_re_tag_friendly = re.compile(_h_re_base % '+', re.X | re.M)

    def _h_sub(self, match):
        if match.group(1) is not None:
            # Setext header
            n = {"=": 1, "-": 2}[match.group(3)[0]]
            header_group = match.group(2)
        else:
            # atx header
            n = len(match.group(5))
            header_group = match.group(6)

        demote_headers = self.extras.get("demote-headers")
        if demote_headers:
            n = min(n + demote_headers, 6)
        header_id_attr = ""
        if "header-ids" in self.extras:
            header_id = self.header_id_from_text(header_group,
                self.extras["header-ids"], n)
            if header_id:
                header_id_attr = ' id="%s"' % header_id
        html = self._run_span_gamut(header_group)
        if "toc" in self.extras and header_id:
            self._toc_add_entry(n, header_id, html)
        return "<h%d%s>%s</h%d>\n\n" % (n, header_id_attr, html, n)