Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 4
0
    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 ''
Esempio n. 5
0
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
Esempio n. 6
0
    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 ''
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
    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
Esempio n. 13
0
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
Esempio n. 14
0
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
Esempio n. 15
0
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'],
    ))
Esempio n. 16
0
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'],
    ))