<commit_before>---
layout:      post
title:       给 Github 的 Markdown 文件生成目录
subtitle:    这是个坑，久久未填 ……
date:        2015-3-31 22:10:31
author:      Damnever
keywords:    Github,Markdown,TOC,Table of content
description: 给 Github 的 Markdown 文件生成目录，TOC for Github's markdown file
categories:
  - Python
tags:
  - Python
  - Markdown

---

以前维护这份[学(dai)习(xue)笔(lie)记(biao)](https://github.com/Damnever/Note/blob/master/Python.md)的都是用手工来生成目录的，说来惭愧……

今天实在受不了了，天气变热，上课时老师让我们用给定的税率计算税钱 ……

往[Python.md](https://github.com/Damnever/Note/blob/master/Python.md)添加东西的时候，发现都接近 2K 行了，`Github`也不支持自动生成目录。到时候如果又添加一个类别，岂不是眼睛都要找瞎，想想还是把这个坑填了吧！

通过编程提高生活品质！

---

首先必须保证你的标题格式是这样的才能使用这个脚本，用`#`表示标题格式的还要添加`id`，小的做不来……
{% highlight python %}
<h1 id="id1">H1 title</h1>
一级标题
<h2 id="id2">H2 title</h2>
二级标题
<h1 id="id11">H11 title</h1>
又是一级标题……
{% endhighlight %}
生成的目录格式如下，应该支持大多`Markdown`编辑器：
{% highlight python %}
*   [H1 title](#id1)
    *    [H2 title](#id2)
*   [H11 title](#id11)
{% endhighlight %}

帮助文档如下：
{% highlight python %}
*damnever->>> python toc_gen.py -h
usage: toc_gen.py [-h] [-S src] [-D des]

Generates TOC for markdown file.

optional arguments:
      -h, --help  show this help message and exit
      -S src      A path of source file.
      -D des      A file path to store TOC.
{% endhighlight %}

---
`-S`参数后接源`Markdown`文件路径，`-D`后面接要写入的文件路径，相对或绝对路径都行，不指定目的文件，直接打印在屏幕上。

好吧我又废话了，脚本源文件在这： [toc_gen.py](https://github.com/Damnever/toys/blob/master/toc_gen.py)。

---

主要用到了`HTMLParser`和`argparse`：
{% highlight python linenos=table %}
from __future__ import print_function

import os
import argparse
from HTMLParser import HTMLParser

def get_toc(html):

    toc_list = []

    class MyHTMLParser(HTMLParser):<commit_msg>coding change life<commit_after>---
layout:      post
title:       给 Github 的 Markdown 文件生成目录
subtitle:    这是个坑，久久未填 ……
date:        2015-3-31 22:10:31
author:      Damnever
keywords:    Github,Markdown,TOC,Table of content
description: 给 Github 的 Markdown 文件生成目录，TOC for Github's markdown file
categories:
  - Python
tags:
  - Python
  - Markdown

---

以前维护这份[学(dai)习(xue)笔(lie)记(biao)](https://github.com/Damnever/Note/blob/master/Python.md)的都是用手工来生成目录的，说来惭愧……

今天实在受不了了，天气变热，上课时老师让我们用给定的税率计算税钱 ……

往[Python.md](https://github.com/Damnever/Note/blob/master/Python.md)添加东西的时候，发现都接近 2K 行了，`Github`也不支持自动生成目录。到时候如果又添加一个类别，岂不是眼睛都要找瞎，想想还是把这个坑填了吧！

通过编程提高生活品质！

---

首先必须保证你的标题格式是这样的才能使用这个脚本，用`#`表示标题格式的还要添加`id`，小的做不来……
{% highlight html %}
<h1 id="id1">H1 title</h1>
一级标题
<h2 id="id2">H2 title</h2>
二级标题
<h1 id="id11">H11 title</h1>
又是一级标题……
{% endhighlight %}
生成的目录格式如下，应该支持大多`Markdown`编辑器：
{% highlight html %}
*   [H1 title](#id1)
    *    [H2 title](#id2)
*   [H11 title](#id11)
{% endhighlight %}

帮助文档如下：
{% highlight bash %}
*damnever->>> python toc_gen.py -h
usage: toc_gen.py [-h] [-S src] [-D des]

Generates TOC for markdown file.

optional arguments:
      -h, --help  show this help message and exit
      -S src      A path of source file.
      -D des      A file path to store TOC.
{% endhighlight %}

---
`-S`参数后接源`Markdown`文件路径，`-D`后面接要写入的文件路径，相对或绝对路径都行，不指定目的文件，直接打印在屏幕上。

好吧我又废话了，脚本源文件在这： [toc_gen.py](https://github.com/Damnever/toys/blob/master/toc_gen.py)。

---

主要用到了`HTMLParser`和`argparse`：
{% highlight python linenos=table %}
from __future__ import print_function

import os
import argparse
from HTMLParser import HTMLParser

def get_toc(html):

    toc_list = []

    class MyHTMLParser(HTMLParser):
{'fraction_non_alphanumeric': 0.14795474325500435, 'fraction_numerical': 0.020887728459530026, 'mean_word_length': 4.153961136023916, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 21, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3869668', 'n_tokens_mistral': 1825, 'n_tokens_neox': 1874, 'n_words': 277}