Esempio n. 1
0
    def do_senss (self, elems, entr, xlit=False, xlang=None):
        XKW = self.XKW
        rdngs = getattr (entr, '_rdng', [])
        kanjs = getattr (entr, '_kanj', [])
        senss = [];  last_pos = None
        for ord, elem in enumerate (elems):
            sens = jdb.Sens (sens=ord+1)
            snotes = elem.find ('s_inf')
            if snotes is not None and snotes.text: sens.notes = snotes.text

            pelems = elem.findall('pos')
            if pelems:
                last_pos = self.do_kws (pelems, sens, '_pos', 'POS')
            elif last_pos:
                sens._pos = [jdb.Pos(kw=x.kw) for x in last_pos]

            self.do_kws   (elem.findall('name_type'), sens, '_misc', 'NAME_TYPE')
            self.do_kws   (elem.findall('misc'),      sens, '_misc', 'MISC')
            self.do_kws   (elem.findall('field'),     sens, '_fld',  'FLD')
            self.do_kws   (elem.findall('dial'),      sens, '_dial', 'DIAL')
            self.do_lsrc  (elem.findall('lsource'),   sens,)
            self.do_gloss (elem.findall('gloss'),     sens, xlit, xlang)
            self.do_gloss (elem.findall('trans_det'), sens,)
            self.do_restr (elem.findall('stagr'),     sens, rdngs, 'stagr')
            self.do_restr (elem.findall('stagk'),     sens, kanjs, 'stagk')
            self.do_xref  (elem.findall('xref'),      sens, jdb.KW.XREF['see'].id)
            self.do_xref  (elem.findall('ant'),       sens, jdb.KW.XREF['ant'].id)

            if not getattr (sens, '_gloss', None):
                self.warn ("Sense %d has no glosses." % (ord+1))
            senss.append (sens)
        if senss: entr._sens = senss
Esempio n. 2
0
def kw2id(operand, new, old):
    if operand == 'pos':
        if new: new = jdb.Pos(kw=jdb.KW.POS[new].id)
        if old: old = jdb.KW.POS[old].id
    elif operand == 'misc':
        if new: new = jdb.Misc(kw=jdb.KW.MISC[new].id)
        if old: old = jdb.KW.MISC[old].id
    elif operand == 'fld':
        if new: new = jdb.Fld(kw=jdb.KW.FLD[new].id)
        if old: old = jdb.KW.FLD[old].id
    elif operand == 'dial':
        if new: new = jdb.Dial(kw=jdb.KW.DIAL[new].id)
        if old: old = jdb.KW.DIAL[old].id
    return new, old
Esempio n. 3
0
def main(args, opts):
    jdb.reset_encoding(sys.stdout, 'utf-8')
    errs = []
    entrs = []
    try:
        form, svc, dbg, cur, sid, sess, parms, cfg = jmcgi.parseform()
    except Exception as e:
        jmcgi.err_page([str(e)])

    fv = form.getfirst
    fl = form.getlist
    is_editor = jmcgi.is_editor(sess)
    dbg = fv('dbg')
    meth = fv('meth')
    def_corp = fv('c')  # Default corpus for new entries.
    defcorpid = None
    if def_corp:
        try:
            def_corp = int(def_corp)
        except ValueError:
            pass
        try:
            defcorpid = jdb.KW.SRC[def_corp].id
        except KeyError:
            errs.append("Bad url parameter: c=%s" % def_corp)
    force_corp = fv('f')  # Force default corpus for new entries.

    sentrs = fl("entr")
    for sentr in sentrs:
        try:
            entrs = serialize.unserialize(sentr)
        except Exception as e:
            errs.append("Bad 'entr' value, unable to unserialize: %s" % str(e))
        else:
            entrs.append(entr)

    jentrs = fl('j')
    for jentr in jentrs:
        try:
            entr = edparse.entr(jentr)
        except Exception as e:
            errs.append("Bad 'j' value, unable to parse: %s" % str(e))
        else:
            entr.src = None
            entrs.append(entr)

    elist, qlist, active = fl('e'), fl('q'), fv('a')
    if elist or qlist:
        entrs.extend(
            jmcgi.get_entrs(cur,
                            elist or [],
                            qlist or [],
                            errs,
                            active=active,
                            corpus=def_corp) or [])
    cur.close()

    if (elist or qlist or jentrs or sentrs) and not entrs:
        # The caller explictly specified and entry to edit but we
        # didn't find it (or them).  Rather than treating this as
        # though no entries were given and displaying a blank edit
        # form, show an error message.
        errs.append("No matching entries were found")
    if errs: jmcgi.err_page(errs)

    srcs = sorted(jdb.KW.recs('SRC'), key=lambda x: x.kw.lower())
    #srcs.insert (0, jdb.Obj (id=0, kw='', descr=''))
    if not entrs:
        # This is a blank new entry.
        # The following dummy entry will produce the default
        # text for new entries: no kanji, no reading, and sense
        # text "[1][n]".
        entr = jdb.Entr(
            _sens=[jdb.Sens(_pos=[jdb.Pos(kw=jdb.KW.POS['n'].id)])], src=None)
        entrs = [entr]
    for e in entrs:
        if not is_editor: remove_freqs(e)
        e.ISDELETE = (e.stat == jdb.KW.STAT['D'].id) or None
        # Provide a default corpus.
        if not e.src: e.src = defcorpid
        e.NOCORPOPT = force_corp

    if errs: jmcgi.err_page(errs)

    for e in entrs:
        e.ktxt = fmtjel.kanjs(e._kanj)
        e.rtxt = fmtjel.rdngs(e._rdng, e._kanj)
        e.stxt = fmtjel.senss(e._sens, e._kanj, e._rdng)

    if errs: jmcgi.err_page(errs)

    jmcgi.jinja_page('edform.jinja',
                     parms=parms,
                     extra={},
                     entrs=entrs,
                     srcs=srcs,
                     is_editor=is_editor,
                     svc=svc,
                     dbg=dbg,
                     sid=sid,
                     session=sess,
                     cfg=cfg,
                     this_page='edform.py')