文章归档

用kindle来阅读源代码

最近新买了一台kindle 4, 好家伙,可惜不能用来看论文,糟蹋了,转换也是乱七八糟不能看

于是萌生了在kindle上面阅读源代码的想法,方法如下

第一步:合并源文件

检索一个source目录,遍历src下所有的.h .c 文件合并输出到一个文件,支持分级,每一个文件为一个chapter。如果有多个子目录,封装,再迭代函数

C++代码
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/types.h>
  4. #include <dirent.h>
  5. #include <stdlib.h>
  6. #define BUFFSIZE 1024
  7. int main(int argc, char **argv)
  8. {
  9.     char buf[BUFFSIZE], *p = buf;
  10.     FILE *fp, *nfp;
  11.     DIR *dp;
  12.     struct dirent *dir;
  13.     char chapter[BUFFSIZE];
  14.     int cp = 1;
  15.     if (argc!=3) {
  16.         printf("Usage:......n");
  17.         exit(0);
  18.     }
  19.     strcpy(buf,argv[1]);
  20.     p = p+strlen(argv[1]);
  21.     *p++ = '/';
  22.     if ((nfp = fopen(argv[2], "w")) == NULL) {
  23.         printf("error for open the file:%sn",argv[2]);
  24.         exit(0);
  25.     }
  26.     if ((dp = opendir(argv[1])) == NULL) {
  27.         printf("error for open the dirent:%sn",argv[1]);
  28.         exit(0);
  29.     }
  30.     while ((dir = readdir(dp))!=NULL) {
  31.         if (strcmp(dir->d_name,".")==0||strcmp(dir->d_name,"..")==0)
  32.             continue;
  33.         strcpy(p,dir->d_name);
  34.         if ((fp=fopen(buf,"r"))==NULL)
  35.             continue;
  36.         char ch;
  37.         sprintf(chapter,"%d",cp++);
  38.         fputs("<h1>The ",nfp);
  39.         fputs(chapter,nfp);
  40.         fputs(" Chapter   ",nfp);
  41.         fputs(dir->d_name,nfp);
  42.         fputs("</h1>nn",nfp);
  43.         while ((ch=fgetc(fp))!=EOF)
  44.             fputc(ch,nfp);
  45.         fputs("nnnnn",nfp);
  46.         fclose(fp);
  47.     }
  48.     fclose(nfp);
  49.     closedir(dp);
  50.     return(0);
  51. }

加<h1></h1>是为了方便后续的定位修改,当然,不写也可以,直接正则也OK

输出结果如下,

C++代码
  1. <h1>The 1 Chapter   syncio.c</h1>
  2. /* Synchronous socket and file I/O operations useful across the core.
  3.  *
  4.  * Copyright (c) 2009-2010, Salvatore Sanfilippo <antirez at gmail dot com>
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions are met:

明显,<h1>The 1 Chapter   syncio.c</h1>  并不是 c 的代码,所以vim是无法高亮的

第二步:vim利器,TOhtml

利用vim的编辑利器TOhtml将源文件以html格式输出并高亮显示,文件太大的话,需要一点时间

注意,kindle 不适合显示行号,宽度不足,把行号去掉:

:%s/<span>.{6}</span>//g

再把&lt;全部替换为<,&gt; 替换为 >

保存为html文件,看示例:redis.c.html


第三步:利用Calibre转换

calibre可以直接将html的文件转换成mobi,epub等文档,非常方便。

如果可以,大家熟悉一下mobi的文件结构,自己写个转换过程,就可以省略calibre这步麻烦了。

不过我找了很久也没什么资料,也罢,哈哈

4 comments to 用kindle来阅读源代码

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>