OSDN Git Service

convert all of fontparser classes into functions
[sawarabi-fonts/sawarabi-fonts.git] / script / rest_of_kanji.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # $Id$
5 # Author: mshio <mshio@users.osdn.me>
6
7 """
8 概要
9 ---------------------
10 このスクリプトは、指定された漢字のうち、フォントファイルに含まれて
11 いない漢字を表示し、最後にその字数を表示するものです。
12
13 使い方
14 ---------------------
15 必要な引数は2つです。
16 最初の引数には、検査対象のフォントファイル(TTF など)を指定します。
17 次の引数には、検査したい漢字を書き連ねたテキストファイル(便宜上これを
18 漢字ファイルと呼びます)のパスを指定します。
19
20 漢字ファイルは utf-8 で書かれている必要があります。
21 なお、漢字ファイルには改行を含めることができます。また、`#'から始まる
22 行はコメントとして扱われ、読み飛ばされます。
23
24 このスクリプトは、渡された漢字ファイルを読み取り、そのリストの中から、
25 フォントファイルに含まれていない漢字を抽出して出力します。
26
27 必要事項
28 ---------------------
29 このスクリプトを実行するには、FontForge が必要です。
30 """
31
32 __version__ = '0.12'
33
34 import argparse
35 import sys
36 from fontparser import filter_glyphs
37 from listprinter import SimpleListPrinter
38
39 def kanji_list(file_path):
40     def convert(line):
41         try:
42             s = unicode(line.rstrip('\r\n'), 'utf-8')
43         except:
44             sys.exit('[ERROR] %s' % line)
45         return s
46
47     buf = []
48     with open(file_path, 'r') as file:
49         for line in file:
50             if line.startswith('#'):
51                 continue
52             for c in convert(line):
53                 buf.append(ord(c))
54     return buf
55
56 def parse_args():
57     parser = argparse.ArgumentParser()
58     parser.add_argument('font_file', help='path of a font file')
59     parser.add_argument('kanji_file', help='path of a kanji file')
60
61     return parser.parse_args()
62
63 if __name__ == '__main__':
64     args = parse_args()
65     kanjis = kanji_list(args.kanji_file)
66
67     def remove(char):
68         code = next(iter(filter(lambda c: char.unicode == c, kanjis)), False)
69         if code:
70             kanjis.remove(code)
71
72     filter_glyphs(args.font_file, remove)
73
74     p = SimpleListPrinter(delimiter=0x3001)
75     p.output(kanjis)
76     print
77     print "%d char(s)" % len(kanjis)