生成HTML版中文pro Git book » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

生成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


复制仓库:

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)
然后就可以

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

生成简体中文版html文档。


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


### WordPress Plugin Interface ###

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


/*--------------------------------------------------------------
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的那句修改下:

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

在git bash里面运行:

./pro2html.sh zh


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

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

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

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

Insert 18333fig0301.png

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

写了个替换函数:

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]) && is_array($matches[1]) )
        {
            $num = count($matches[0]);
            for($i=0;$i < $num; ++$i)
            {
                $img = sprintf("\n" .''. "\n", $matches[1][$i]);
                $content = str_replace($matches[0][$i], $img ,$content );
            }
        }   
    }
    return $content;
}
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)

Tagged in : git

All Comments (0)
Gravatar image
No Comments