OSDN Git Service

add files of the current web site
[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.sourceforge.jp>
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.11'
33
34 import sys
35 from types import MethodType
36 from fontparser import FontParser
37 from listprinter import SimpleListPrinter
38
39 class KanjiList:
40     def __init__(self, file_path):
41         self.file_path = file_path
42         self.buffer = []
43
44     def convert(self, line):
45         try:
46             s = unicode(line.rstrip('\r\n'), 'utf-8')
47         except:
48             sys.exit('[ERROR] %s' % line)
49         return s
50
51     def read(self):
52         fh = open(self.file_path, 'r')
53         for line in fh:
54             if line.startswith('#'):
55                 continue
56             for c in self.convert(line):
57                 self.buffer.append(ord(c))
58         fh.close()
59         return self.buffer
60
61
62 if __name__ == '__main__':
63     parser = FontParser(sys.argv[1])
64     kanji_list = KanjiList(sys.argv[2]).read()
65
66     def remove(self, char):
67         for c in kanji_list:
68             if char.unicode == c:
69                 kanji_list.remove(c)
70                 break
71
72     parser.parse(remove)
73
74     p = SimpleListPrinter(delimiter=0x3001)
75     p.output(kanji_list)
76     print
77     print "%d char(s)" % len(kanji_list)