生成HTML版中文pro Git book

* 项目名称:Pro Git
* 项目地址:https://github.com/progit/progit
* 项目首页:http://progit.org/
中文:http://progit.org/book/zh/
* 仓库地址:git://github.com/progit/progit.git


复制仓库:

1
2
git clone git://github.com/progit/progit.git
cd progit

readme里面有关于生成e-book的教程:

Making Ebooks
=============

On Fedora you can run something like this::

$ yum install ruby calibre rubygems ruby-devel rubygem-ruby-debug
$ gem install rdiscount
$ makeebooks en # will produce a mobi

不过我还是喜欢html版的。
这儿发现了个生成html文档的shell脚本pro2html.sh
Linux下如果没装Markdown,要下个markdown转html的小程序。
在这儿可以找到: http://daringfireball.net/projects/markdown/ (http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip)
然后就可以

1
2
wget http://opengit.org/open/source/pro2html.sh
./pro2html.sh zh

生成简体中文版html文档。


不过windows下就比较麻烦了。因为我没有装perl环境,也不想为了转换一个文档而装一个perl.于是想到了PHP.
这儿(http://michelf.com/projects/php-markdown/)下载php Markdown,发现这个并不能直接用于命令行。
于是我加了一段代码。

1
### WordPress Plugin Interface ###

上面加入一段用于在cli模式运行的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*--------------------------------------------------------------
start cli mode for windows
by 荒野无灯
----------------------------------------------------------------*/

//or use php_sapi_name() === 'cli'
if( PHP_SAPI === 'cli' )
{
    if( !isset($GLOBALS['argv']) )
    {
        return ;
    }

    if($GLOBALS['argc'] <= 1 || !isset($GLOBALS['argv'][1]))
    {
        die("Error: please give me a filename param!\n");
    }
    if( !empty($GLOBALS['argv'][1]) )
    {
        $filename = $GLOBALS['argv'][1];
        $filename = str_replace("\",'/',$filename);
    }

    if( !file_exists($filename) )
    {
        die('Error: File '. $filename .' not exists!');
    }

    $to_save = $GLOBALS['argv'][2];

    if( file_put_contents($to_save, Markdown( file_get_contents($filename) ) ) )
    {
        echo "
generated file:  $to_save \r\n";
    }
    else
    {
        echo "
Error: failed to generate file  $to_save \r\n";
    }

}
/*--------------------------------------------------------------
end cli mode for windows
by 荒野无灯
----------------------------------------------------------------*/

打开pro2html.sh ,把生成html的那句修改下:

1
2
3
4
    #uncomment below for Linux 
    #markdown -v -o 'html4' $list -f $html
#for windows
php /d/software/util/markdown.php $list $html

在git bash里面运行:

1
./pro2html.sh zh


html生成了,没有目录的话,浏览起来十分不便。目录生成就用Scott Yang 's **Table of Contents Generator 0.4 (20110626)** ,稍微修改一下。

1
 php /d/software/util/hacklog_toc.php progit_zh.html progit_zh_with_toc.html

此外,我还加了个返回顶部的代码。

生成html后还有个问题没解决,那就是图片。它里面的图片代码格式如:

1
Insert 18333fig0301.png

看了下,应该转换为如下:
[cc lang="html"]

写了个替换函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function handle_insert_image($content)
{
    if( preg_match_all("/Insert\s([a-z0-9]+)\.png/is",$content, $matches) )
    {
        //var_dump($matches);
        if( is_array($matches[0]) &#038;&#038; is_array($matches[1]) )
        {
            $num = count($matches[0]);
            for($i=0;$i < $num; ++$i)
            {
                $img = sprintf("\n" .'<img border="0" src="figures/%s-tn.png" />'. "\n", $matches[1][$i]);
                $content = str_replace($matches[0][$i], $img ,$content );
            }
        }  
    }
    return $content;
}
1
php /d/software/util/progit-insert-image.php progit_zh_with_toc.html progit_zh_toc_figure.html

好了,现在打开最后生成的progit_zh_toc_figure.html 看下,已经OK了:

本文相关文件下载:

progit2html_by-ihacklog.zip (17.0 KB)

更多
No Responses Post a comment

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS