def fmt(self, search_conds=None): if search_conds and search_conds.field == 'kanji': matchreg = search.matched_regexp(search_conds) t = color.color_regexp(matchreg, self.text, 'kanji', 'matchjp') else: t = fmt(self.text, 'kanji') if self.ke_inf: t = t + fmt('[' + self.ke_inf + ']', 'subdue') return t
def abbrev_line(cur, abbrev): exp = short_expansion(cur, abbrev) if exp: abbrev = fmt(abbrev, 'subdue') return "%s\t%s" % (abbrev, exp) else: return None
def tagstr(self, search_conditions): '''Return a string with all information tags. Automatic colors depending on myougiden.color.use_color .''' tagstr = '' tags = [] for attr in ('pos', 'field', 'misc', 'dial'): tag = getattr(self, attr) if tag: tags.append(tag) if len(tags) > 0: tagstr += '[%s]' % (';'.join(tags)) if self.s_inf: if len(tagstr) > 0: tagstr += ' ' tagstr += '[%s]' % self.s_inf if self.stagk or self.stagr: if len(tagstr) > 0: tagstr += ' ' tagstr += '〔%s〕' % '、'.join(self.stagk + self.stagr) if len(tagstr) > 0: return fmt(tagstr, 'subdue') else: return ''
def fmt(self, search_conds=None): if self.romaji: t = self.romaji(self.text) else: t = self.text if search_conds and search_conds.field == 'reading': matchreg = search.matched_regexp(search_conds) t = color.color_regexp(matchreg, t, 'reading', 'matchjp') else: t = fmt(t, 'reading') if self.re_nokanji: t = fmt('*', 'subdue') + t if self.re_inf: t = t + fmt('[' + self.re_inf + ']', 'subdue') return t
def format_human(self, search_conds, romajifn=None): matchreg = search.matched_regexp(search_conds) ksep = fmt(';', 'subdue') if romajifn: rsep = fmt(', ', 'subdue') for r in self.readings: r.romaji = romajifn else: rsep = fmt('、', 'subdue') gsep = fmt('; ', 'subdue') rpar = (fmt('(', 'subdue') + '%s' + fmt(')', 'subdue')) s = '' if self.is_frequent(): s += fmt('※', 'highlight') + ' ' has_re_restr = False for r in self.readings: if r.re_restr: has_re_restr = True break if self.kanjis: if not has_re_restr: s += ksep.join([k.fmt(search_conds) for k in self.kanjis]) s += rpar % (rsep.join([r.fmt(search_conds) for r in self.readings])) else: ks = [] for k in self.kanjis: my_r = [r.fmt(search_conds) for r in self.readings if not r.re_restr or k.text in r.re_restr] ks.append(k.fmt(search_conds) + rpar % (rsep.join(my_r))) s += ksep.join(ks) else: s += rsep.join([r.fmt(search_conds) for r in self.readings]) for sensenum, sense in enumerate(self.senses, start=1): sn = fmt('%d.' % sensenum, 'misc') tagstr = sense.tagstr(search_conds) if tagstr: tagstr += ' ' s += "\n%s %s%s" % (sn, tagstr, gsep.join(sense.fmt_glosses(search_conds))) return s
def format_tsv(self, search_conds, romajifn=None): matchreg = search.matched_regexp(search_conds) # as of 2012-02-22, no kanji or reading field uses full-width # semicolon. ksep = fmt(';', 'subdue') if romajifn: # ascii comma is free, too rsep = fmt(',', 'subdue') for r in self.readings: r.romaji = romajifn else: rsep = fmt(';', 'subdue') # as of 2012-02-22, only one entry uses '|' . # and it's "c|net", which should be "CNET" anyway. gsep = fmt('|', 'subdue') # escape separator for sense in self.senses: for idx, gloss in enumerate(sense.glosses): # I am unreasonably proud of this solution. sense.glosses[idx] = sense.glosses[idx].replace(gsep, '¦') s = '' s += rsep.join([r.fmt(search_conds) for r in self.readings]) s += "\t" + ksep.join([k.fmt(search_conds) for k in self.kanjis]) for sense in self.senses: tagstr = sense.tagstr(search_conds) if tagstr: tagstr += ' ' s += "\t%s%s" % (tagstr, gsep.join(sense.glosses)) if self.is_frequent(): s += ' ' + fmt('(P)', 'highlight') return s
def format_human(self, search_conds, romajifn=None): matchreg = search.matched_regexp(search_conds) ksep = fmt(';', 'subdue') if romajifn: rsep = fmt(', ', 'subdue') for r in self.readings: r.romaji = romajifn else: rsep = fmt('、', 'subdue') gsep = fmt('; ', 'subdue') rpar = (fmt('(', 'subdue') + '%s' + fmt(')', 'subdue')) s = '' if self.is_frequent(): s += fmt('※', 'highlight') + ' ' has_re_restr = False for r in self.readings: if r.re_restr: has_re_restr = True break if self.kanjis: if not has_re_restr: s += ksep.join([k.fmt(search_conds) for k in self.kanjis]) s += rpar % (rsep.join( [r.fmt(search_conds) for r in self.readings])) else: ks = [] for k in self.kanjis: my_r = [ r.fmt(search_conds) for r in self.readings if not r.re_restr or k.text in r.re_restr ] ks.append(k.fmt(search_conds) + rpar % (rsep.join(my_r))) s += ksep.join(ks) else: s += rsep.join([r.fmt(search_conds) for r in self.readings]) for sensenum, sense in enumerate(self.senses, start=1): sn = fmt('%d.' % sensenum, 'misc') tagstr = sense.tagstr(search_conds) if tagstr: tagstr += ' ' s += "\n%s %s%s" % (sn, tagstr, gsep.join(sense.fmt_glosses(search_conds))) return s
def opendb(case_sensitive=False): '''Test and open SQL database; returns (con, cur). Raises DatabaseAccessError subclass if database can't be used for any reason.''' temps = test_database_tempfiles() if temps == 'stale': raise DatabaseStaleUpdates( 'updatedb-myougiden was interrupted; please run again') elif temps == 'updating': print("%s: updatedb-myougiden is running, please wait a while :)" % fmt('WARNING', 'warning')) if not os.path.isfile(config.get('paths', 'database')): raise DatabaseMissing('Could not find ' + config.get('paths', 'database')) try: con = sql.connect(config.get('paths', 'database')) cur = con.cursor() except sql.OperationalError as e: raise DatabaseAccessError(str(e)) try: execute(cur, ('SELECT dbversion FROM versions;')) dbversion = cur.fetchone()[0] except sql.OperationalError: raise DatabaseAccessError("Couldn't read database to check version") if dbversion != config.get('core', 'dbversion'): raise DatabaseWrongVersion( 'Incorrect database version: %s' % dbversion) if case_sensitive: con.create_function('regexp', 2, regexp_sensitive) # con.create_function('match', 2, match_word_sensitive) execute(cur, 'PRAGMA case_sensitive_like = 1;') else: con.create_function('regexp', 2, regexp_insensitive) # con.create_function('match', 2, match_word_insensitive) execute(cur, 'PRAGMA case_sensitive_like = 0;') return con, cur
def opendb(case_sensitive=False): '''Test and open SQL database; returns (con, cur). Raises DatabaseAccessError subclass if database can't be used for any reason.''' temps = test_database_tempfiles() if temps == 'stale': raise DatabaseStaleUpdates('updatedb-myougiden was interrupted; please run again') elif temps == 'updating': print("%s: updatedb-myougiden is running, please wait a while :)" % fmt('WARNING', 'warning')) if not os.path.isfile(config.get('paths','database')): raise DatabaseMissing('Could not find ' + config.get('paths','database')) try: con = sql.connect(config.get('paths','database')) cur = con.cursor() except sql.OperationalError as e: raise DatabaseAccessError(str(e)) try: cur.execute('SELECT dbversion FROM versions;') dbversion = cur.fetchone()[0] except sql.OperationalError: raise DatabaseAccessError("Couldn't read database to check version") if dbversion != config.get('core','dbversion'): raise DatabaseWrongVersion('Incorrect database version: %s' % dbversion) if case_sensitive: con.create_function('regexp', 2, regexp_sensitive) con.create_function('match', 2, match_word_sensitive) cur.execute('PRAGMA case_sensitive_like = 1;') else: con.create_function('regexp', 2, regexp_insensitive) con.create_function('match', 2, match_word_insensitive) cur.execute('PRAGMA case_sensitive_like = 0;') return con, cur
def version(cur): import argparse import romkan # import termcolor # no version import platform try: import psutil psutil_version = psutil.__version__ except ImportError: psutil_version = None if cur: from myougiden import database database.execute( cur, ''' SELECT dbversion, jmdict_mtime FROM versions; ''') row = cur.fetchone() dbversion = fmt(row[0], 'parameter') jmdict_mtime = fmt(row[1], 'parameter') else: dbversion = fmt('Database not found!', 'error') jmdict_mtime = fmt('Database not found!', 'error') if config: version = fmt(config.get('core', 'version'), 'parameter') prefix = fmt(config.get('paths', 'prefix'), 'parameter') else: version = fmt('Config not found!', 'error') prefix = fmt('Config not found!', 'error') scripts = {} for s in ('gzip', 'rsync', 'nice', 'ionice'): path = which(s) if path: scripts[s] = fmt(path, 'parameter') else: scripts[s] = fmt(path, 'warning') return (''' myougiden version %s , database v. %s JMdict last modified %s Python version %s (%s) Prefix: %s Libraries: romkan: %s argparse: %s psutil: %s External programs: gzip: %s rsync: %s nice: %s ionice: %s '''.strip() % ( version, dbversion, jmdict_mtime, fmt(platform.python_version(), 'parameter'), fmt(platform.platform(), 'parameter'), prefix, fmt(romkan.__version__, 'parameter'), # fmt(termcolor.__version__, 'parameter'), fmt(argparse.__version__, 'parameter'), fmt(psutil_version, 'parameter'), scripts['gzip'], scripts['rsync'], scripts['nice'], scripts['ionice'], ))
def version(cur): import argparse import romkan # import termcolor # no version import platform try: import psutil psutil_version = psutil.__version__ except ImportError: psutil_version = None if cur: from myougiden import database database.execute(cur, ''' SELECT dbversion, jmdict_mtime FROM versions; ''') row = cur.fetchone() dbversion = fmt(row[0], 'parameter') jmdict_mtime = fmt(row[1], 'parameter') else: dbversion = fmt('Database not found!', 'error') jmdict_mtime = fmt('Database not found!', 'error') if config: version = fmt(config.get('core','version'), 'parameter') prefix = fmt(config.get('paths','prefix'), 'parameter') else: version = fmt('Config not found!', 'error') prefix = fmt('Config not found!', 'error') scripts = {} for s in ('gzip', 'rsync', 'nice', 'ionice'): path = which(s) if path: scripts[s] = fmt(path, 'parameter') else: scripts[s] = fmt(path, 'warning') return (''' myougiden version %s , database v. %s JMdict last modified %s Python version %s (%s) Prefix: %s Libraries: romkan: %s argparse: %s psutil: %s External programs: gzip: %s rsync: %s nice: %s ionice: %s '''.strip() % ( version, dbversion, jmdict_mtime, fmt(platform.python_version(), 'parameter'), fmt(platform.platform(), 'parameter'), prefix, fmt(romkan.__version__, 'parameter'), # fmt(termcolor.__version__, 'parameter'), fmt(argparse.__version__, 'parameter'), fmt(psutil_version, 'parameter'), scripts['gzip'], scripts['rsync'], scripts['nice'], scripts['ionice'], ))