~stub/ubuntu/precise/calibre/devel

« back to all changes in this revision

Viewing changes to setup/resources.py

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2011-04-12 11:29:25 UTC
  • mfrom: (42.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20110412112925-c7171kt2bb5rmft4
Tags: 0.7.50+dfsg-2
* debian/control: Build with libpodofo-dev to enable PDF metadata.
  (Closes: #619632)
* debian/control: Add libboost1.42-dev build dependency. Apparently it is
  needed in some setups. (Closes: #619807)
* debian/rules: Call dh_sip to generate a proper sip API dependency, to
  prevent crashes like #616372 for partial upgrades.
* debian/control: Bump python-qt4 dependency to >= 4.8.3-2, which reportedly
  fixes crashes on startup. (Closes: #619701, #620125)

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
7
7
__docformat__ = 'restructuredtext en'
8
8
 
9
 
import os, cPickle
 
9
import os, cPickle, re, anydbm, shutil, marshal
 
10
from zlib import compress
10
11
 
11
 
from setup import Command, basenames
 
12
from setup import Command, basenames, __appname__
12
13
 
13
14
def get_opts_from_parser(parser):
14
15
    def do_opt(opt):
26
27
 
27
28
    description = 'Compile various needed calibre resources'
28
29
 
 
30
    KAKASI_PATH = os.path.join(Command.SRC,  __appname__,
 
31
            'ebooks', 'unihandecode', 'pykakasi')
 
32
 
29
33
    def run(self, opts):
30
34
        scripts = {}
31
35
        for x in ('console', 'gui'):
101
105
        import json
102
106
        json.dump(function_dict, open(dest, 'wb'), indent=4)
103
107
 
 
108
        self.run_kakasi(opts)
 
109
 
 
110
    def run_kakasi(self, opts):
 
111
        self.records = {}
 
112
        src = self.j(self.KAKASI_PATH, 'kakasidict.utf8')
 
113
        dest = self.j(self.RESOURCES, 'localization',
 
114
                'pykakasi','kanwadict2.db')
 
115
        base = os.path.dirname(dest)
 
116
        if not os.path.exists(base):
 
117
            os.makedirs(base)
 
118
 
 
119
        if self.newer(dest, src):
 
120
            self.info('\tGenerating Kanwadict')
 
121
 
 
122
            for line in open(src, "r"):
 
123
                self.parsekdict(line)
 
124
            self.kanwaout(dest)
 
125
 
 
126
        src = self.j(self.KAKASI_PATH, 'itaijidict.utf8')
 
127
        dest = self.j(self.RESOURCES, 'localization',
 
128
                'pykakasi','itaijidict2.pickle')
 
129
 
 
130
        if self.newer(dest, src):
 
131
            self.info('\tGenerating Itaijidict')
 
132
            self.mkitaiji(src, dest)
 
133
 
 
134
        src = self.j(self.KAKASI_PATH, 'kanadict.utf8')
 
135
        dest = self.j(self.RESOURCES, 'localization',
 
136
                'pykakasi','kanadict2.pickle')
 
137
 
 
138
        if self.newer(dest, src):
 
139
            self.info('\tGenerating kanadict')
 
140
            self.mkkanadict(src, dest)
 
141
 
 
142
        return
 
143
 
 
144
 
 
145
    def mkitaiji(self, src, dst):
 
146
        dic = {}
 
147
        for line in open(src, "r"):
 
148
            line = line.decode("utf-8").strip()
 
149
            if line.startswith(';;'): # skip comment
 
150
                continue
 
151
            if re.match(r"^$",line):
 
152
                continue
 
153
            pair = re.sub(r'\\u([0-9a-fA-F]{4})', lambda x:unichr(int(x.group(1),16)), line)
 
154
            dic[pair[0]] = pair[1]
 
155
        cPickle.dump(dic, open(dst, 'w'), protocol=-1) #pickle
 
156
 
 
157
    def mkkanadict(self, src, dst):
 
158
        dic = {}
 
159
        for line in open(src, "r"):
 
160
            line = line.decode("utf-8").strip()
 
161
            if line.startswith(';;'): # skip comment
 
162
                continue
 
163
            if re.match(r"^$",line):
 
164
                continue
 
165
            (alpha, kana) = line.split(' ')
 
166
            dic[kana] = alpha
 
167
        cPickle.dump(dic, open(dst, 'w'), protocol=-1) #pickle
 
168
 
 
169
    def parsekdict(self, line):
 
170
        line = line.decode("utf-8").strip()
 
171
        if line.startswith(';;'): # skip comment
 
172
            return
 
173
        (yomi, kanji) = line.split(' ')
 
174
        if ord(yomi[-1:]) <= ord('z'):
 
175
            tail = yomi[-1:]
 
176
            yomi = yomi[:-1]
 
177
        else:
 
178
            tail = ''
 
179
        self.updaterec(kanji, yomi, tail)
 
180
 
 
181
    def updaterec(self, kanji, yomi, tail):
 
182
            key = "%04x"%ord(kanji[0])
 
183
            if key in self.records:
 
184
                if kanji in self.records[key]:
 
185
                    rec = self.records[key][kanji]
 
186
                    rec.append((yomi,tail))
 
187
                    self.records[key].update( {kanji: rec} )
 
188
                else:
 
189
                    self.records[key][kanji]=[(yomi, tail)]
 
190
            else:
 
191
                self.records[key] = {}
 
192
                self.records[key][kanji]=[(yomi, tail)]
 
193
 
 
194
    def kanwaout(self, out):
 
195
        dic = anydbm.open(out, 'c')
 
196
        for (k, v) in self.records.iteritems():
 
197
            dic[k] = compress(marshal.dumps(v))
 
198
        dic.close()
 
199
 
 
200
 
104
201
    def clean(self):
105
202
        for x in ('scripts', 'recipes', 'ebook-convert-complete'):
106
203
            x = self.j(self.RESOURCES, x+'.pickle')
107
204
            if os.path.exists(x):
108
205
                os.remove(x)
 
206
        kakasi = self.j(self.RESOURCES, 'localization', 'pykakasi')
 
207
        if os.path.exists(kakasi):
 
208
            shutil.rmtree(kakasi)
109
209
 
110
210
 
111
211